0

我有一个含有NSURLConnection描述,像这样NSMutableArray如何重新排序NSMutableDictionary到NSMutableArray?

array { 

    "<NSURLConnection: 0x60eb40>", 
    "<NSURLConnection: 0x6030e0>", 
    "<NSURLConnection: 0x602ce0>", 
    "<NSURLConnection: 0x60c330>", 
    "<NSURLConnection: 0x662f5a0>", 
} 

我还有NSMutableDictionary的键是从上述NSMutableArray的项目,例如:

dictionary { 

"<NSURLConnection: 0x602ce0>" = "Last update: Sep 3, 2012"; 
"<NSURLConnection: 0x6030e0>" = "Last update: Sep 7, 2012"; 
"<NSURLConnection: 0x60c330>" = "Last update: Sep 4, 2012"; 
"<NSURLConnection: 0x60eb40>" = "Last update: Sep 6, 2012"; 
"<NSURLConnection: 0x662f5a0>" = "Last update: Sep 5, 2012"; 

}

我需要重新订购NSMutableDictionary以匹配NSMutableArray的相同订单。现在我在做这样的:

int a; 
for (a=0; a<self.array.count; a++) { 

    NSString *key = [self.array objectAtIndex:a]; 
    NSString *object = [self.dictionary objectForKey:key]; 

    if (object !=nil) { 
     [self.array removeObjectAtIndex:a]; 
     [self.array insertObject:object atIndex:a]; 
    } 
} 

有没有更好的方式来重新排序此NSMutableDicitioanry匹配NSMutableArray的顺序?

谢谢!

+3

词典没有排序。你更大的目标是什么? –

+0

另外,'NSURLConnection'不符合'NSCopying'。你如何使用这些作为关键? –

+0

我写了一个答案,但正确的答案是“你想要做什么?”,因为@ W'rkncacnter说 – nielsbot

回答

3

NSDictionary不保证对其键/值对的任何排序。没有办法保持你的键/值的设置顺序,NSDictionary这样工作没有意义。 (您使用而不是索引来检索值)。

如果你希望你按照一定的顺序为了显示值或键可以检索它们后对它们进行排序:

NSArray * sortedKeys = [ [ myDictionary allKeys ] sortedArrayUsingSelector:... ] ; 

NSArray * sortedKeys = [ [ myDictionary allKeys ] sortedArrayUsingComparator:... ] ; 

然后,您可以检索的关联对象如果你想要排序的键。

另一个选择是维护2个独立的数组,一个用于键和一个用于值,并保持它们的顺序。

+0

我有多个需要跟踪的异步NSURLConnections。最终目标是在UITableView上显示一个有序的NSArray日期。由于异步连接的性质,问题在于日期不会显示在适当的oder中。所以我会跟踪数组中的连接,并将包含日期的响应存储在字典中。然后最终字典永远不会匹配数组的oder。这就是为什么我需要一个新的有序数组,其索引与第一个包含NSURLConnection描述的数组相匹配。 – Winston

相关问题