2013-03-19 58 views
0

遍歷字典我使用下面的語法打印詞典:按鍵的順序

for(id key in myDict) 
    NSLog(@"key=%@ value=%@", key, [myDict objectForKey:key]); 

但我注意到,該oeder不按索引。爲例如說。如果我的字典是

myDict = { 1:a, 2:b, 3:c....26:z} 

上述代碼將不會在打印機1,2,3,4中以隨機順序打印值。

如何使用枚舉代碼來遍歷該字典,如上所述。在我使用的關鍵是一個字符串,如「阿賈伊」「ABHI:等

編輯:是否鑰匙複製到另一個陣列不可避免??是唯一的出路

回答

2
How do I get to traverse that dictionary in order using enumeration code, like the one specified above. The key in my usage is a string such as "ajay" " abhi: etc 

根據你在NSDictionary中的setObject,你不會按照這個順序檢索。

如果您想以除您的添加訂單以外的任何排序順序獲得結果。

然後你可以得到所有的鍵作爲數組[dict allKeys],然後對這個數組進行排序,然後從字典中取回對象。

NSMutableDictionary *dict=[NSMutableDictionary new]; 
[dict setObject:@"anoop" forKey:@"aKey"]; 
[dict setObject:@"john" forKey:@"jKey"]; 
[dict setObject:@"baban" forKey:@"bKey"]; 
[dict setObject:@"chandan" forKey:@"cKey"]; 

NSArray *keys=[dict allKeys]; 
NSArray *sortedKeys=[keys sortedArrayUsingSelector:@selector(compare:)]; 
for (NSString *key in sortedKeys) { 
    NSLog(@"Key: %@, Value : %@",key,dict[key]); 
} 
1

如果您需要的項目是在一個。特定的順序,你應該使用NSArray。字典鍵的順序是不能保證。

1

你可以像這樣的鑰匙......

NSArray *keys = [myDict allKeys]; 

然後按鍵排序,並遍歷排序鍵陣列按順序獲取值。

1

檢索您的字典鍵在該數組中檢索您的字典中的值

1

是根據定義詞典不orderd

排序此鍵陣列

使用。你甚至不能假定現有訂單保持不變。

您可以從字典中獲取allKeys數組,對它進行排序,然後通過遍歷排序的數組來訪問鍵的值。