2014-11-25 35 views
0

我在NSMutableDictionary中遇到了很奇怪的問題。請參閱下面的代碼。NSMutableDictionary key shuffled

NSMutableDictionary *dict=[[NSMutableDictionary alloc]init]; 
[dict setValue:@"India" forKey:(@"Title")]; 
[dict setValue:@"Done" forKey:(@"Status")]; 

當我打印這個字典對象時,它顯示如下。

{ 
Status =Done, 
Title=India; 
} 

這把鑰匙洗牌,實際上標題鍵應該先來。

那麼,我該如何解決這個問題。

+1

據我知道字典是沒有順序。如果您需要訂購,請使用NSArray。 – Jan 2014-11-25 07:23:50

+0

爲什麼你需要訂購?順便說一句,這不是一個問題。 – Kampai 2014-11-25 07:29:22

回答

0

NSDictionary或NSMutableDictionary不保證它的鍵/值對的任何排序。沒有辦法按照設定的順序保存你的鍵/值,並且NSDictionary或NSMutableDictionary無法像這樣工作。 (您使用鍵而不是索引來檢索值)。

如果你希望你按照一定的順序爲了顯示值或鍵可以檢索它們後對它們進行排序:

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

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

然後,您可以檢索的關聯對象如果你想要排序的鍵。

另一種方法是維護2個獨立的數組,一個用於鍵和一個用於值,並保持它們的順序。

1

這不是問題。

你有錯誤的理解或你錯了NSDictionaryNSDictionary是一個存儲基於密鑰的值的容器。

因此,不需要任何順序或索引。

背後的原因是,如果您知道密鑰,則只能訪問容器值。所以檢查這些鍵的順序意義不大。因爲您必須使用該密鑰訪問相關價值。

現在關於訂單 - 使用NSArray替代和更多使用NSArrayNSDictionary的對象。這樣你就可以訂購字典支持。

仍然字典鍵排序方法是如下:

NSMutableDictionary *dict=[[NSMutableDictionary alloc]init]; 
[dict setValue:@"India" forKey:(@"Title")]; 
[dict setValue:@"Done" forKey:(@"Status")]; 

NSArray *keys = [dict allKeys]; 
keys = [keys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

NSLog(@"%@",keys);