2012-07-10 154 views
1

我創建了一個NSDictionary,我把那裏幾個對象和鍵。但問題在於按鍵的首字母理解,按鍵排序。例如,我把「G」,「B」,「C」。因此它將它們排序並顯示爲「B」,「C」,「G」。我想禁用排序,我怎麼能做到這一點。我正在處理更復雜的示例,但我希望在我的問題中保持簡單。 問題:如何禁用NSDictionary中的排序或我怎麼能自己排序NSDictionary?禁用排序的NSDictionary

在此先感謝!

+2

他們沒有排序,他們只是在一個任意的順序。對於所有意圖和目的而言,這是隨機的,並且可以從一個呼叫改變到另一個呼叫。 – 2012-07-10 19:29:39

+0

[停止NSDictionary排序其項目]的可能的重複(http://stackoverflow.com/questions/9797621/stop-nsdictionary-from-sorting-its-items) – 2012-07-10 20:10:50

+0

'NSDictionary'不提供任何排序​​默認情況下。如果你想在內部對你的NSDictionary鍵進行排序,請查看[** NSDictionary with ordered keys **](http://stackoverflow.com/questions/376090/nsdictionary-with-ordered-keys)。 – mopsled 2012-07-10 20:11:25

回答

4

正如由@丹˚F指出,NSDictionary的不排序它的條目。正如@Hot Licks的評論所述,NSDictionary以任意順序放置其內容。你不應該假設字典中條目的順序。 NSArray更適合這種事情。

如果你真的想要顯示字典的內容在一些預先定義的排序順序,您可以使用它們相關聯的值獲取排序的鍵的數組。 NSDictionary類有支持這個的方法keysSortedByValueUsingSelector:keysSortedByValueUsingComparator:。所以,如果你想用值進行排序升序排列,你可以實現控制的顯示順序做這樣的事情:

NSArray *orderedKeys = [myDictionary keysSortedByUsingSelector:@selector(caseInsensitiveCompare:)]; 
for (int i = 0; i < [sortedKeys count]; i++) { 
    NSString *key = [sortedKeys objectAtIndex:i]; 
    NSLog(@"%@ = %@", key, [myDictionary objectForKey:key]); 
} 

結果應該顯示在字典中的每個條目,每個條目中的值進行排序。

4

「排序」是不是一個NSDictionary知道,如果你想要的數據是在一個特定的順序,你應該用一個NSArray代替