2012-01-20 57 views
1

我有一個NSMutableDictionary與動態填充。它看起來像這樣:排序NSMutableDictionary的數據

{ 
    SomeKey = 6; 
    AnotherKey = 2; 
    JustAnotherKey = 28; 
} 

我需要排序這個,所以這將是像這樣的:

{ 
    JustAnotherKey = 28; 
    SomeKey = 6; 
    AnotherKey = 2; 
} 

有什麼辦法來實現這一目標?提前致謝。

回答

1

Dictionary是一個無序集合,意思是它沒有任何元素的順序。所以即使插入第一個對象,如「one」:「first value」,然後是「two」:「第二個值「,當你遍歷鍵時,你可能會以任意順序得到它(例如:」two「,然後」one「)。

但是,如果你想要的是按排序順序排列的值,你可以遍歷所有的按鍵,讀取值並將其存儲在一個數組,然後對其進行排序。

NSArray *values=[myDict allValues]; 
NSMutableArray *sortedKeys=[[NSMutableArray alloc] init]; 
NSArray *sortedValues = [values sortedArrayUsingSelector:@selector(yourSelector)]; 
for (val in sortedArray){ 
    NSString *key=(NSString*)[[myDict allKeysForObject:val] objectAtIndex:0]; 
    [sortedKeys addObject:key] 
} 

這將是第一個獲得在S中的值首發orted順序,然後相應的鍵。 (它沒有進行任何錯誤檢查,因此請注意OutOfIndex異常)。
我不知道這個代碼的效率會有多好,因爲allKeysForObject會迭代所有的鍵。

+0

任何方式獲得與數據相同的順序排序後的密鑰?看起來不錯,但:-) – Robbietjuh

+0

確實有這樣做的方法。我編輯了包含它的答案。如果足夠好,請接受答案 – aqs

+0

非常感謝。我不得不編輯一些代碼,它完美的工作!正是我想要它做的!對對象進行排序,獲取鍵並按照相同的順序放置。 – Robbietjuh

4

不,對不起!

NSDictionary不支持排序它的鍵 - 你必須自己做。

從字典中獲取keys數組,然後對其進行排序,然後從字典中獲取值。例如:

NSArray *keys = [myDictionary allKeys]; 
NSArray *sortedKeys = [keys sortedArrayUsingSelector:@selector(compare:)]; 

NSArray *values = [NSMutableArray array]; 
for (id key in sortedKeys) 
    [values addObject:[myDictionary objectforKey:key]]; 

現在,值的順序是正確的。

但是,這是相當多的工作;如果你想讓它們排序,我會考慮將它們存儲在一個數組中,以開始?

+0

PS如果你只是想顛倒你的鍵數組而不是排序它,那麼這個答案將有所幫助:http://stackoverflow.com/questions/586370/how-can-i-reverse-a-nsarray-in- objective-c – deanWombourne

+0

(雖然你不能保證鍵的初始順序,所以實際上只是反轉它們可能不會做你想做的!) – deanWombourne

+0

我想排列詞典中的對象。所以,就像在這個例子中,我不在乎按鍵的順序。在你提供的代碼中,它對鍵進行排序並放入一個數組中。不幸的是,這在我的項目中不起作用。 – Robbietjuh

1

除了使用NSMutableDictionary之外,您可能會考慮使用NSMutableArray並使用您自己的模型類來填充它,該類包含具有鍵字符串和帶有該值的屬性的屬性。 NSMutableArray提供了對這些對象進行排序的方法。

這對您有幫助嗎?