2017-08-17 148 views
0

我在OSX上,objective-c不是iOS。我有一個NSDictionary這樣NSDictionary to ordered NSArray

NSDictionary* dict = [NSDictionary alloc initWithObjectsAndKeys: 
       @"valueC", @"key3", 
       @"valueA", @"key1", 
       @"valueB", @"key2", 
       nil]; 

當我打電話allKeys和的NSDictionary的allValues,我得到NSArrays。但每次應用程序運行時,順序都會改變 - 因爲NSDictionary是一個無序集合。

我需要的是包含所有值,但排序後鍵,字母,升這樣的數組:

@[@"valueA", @"valueB",@"valueC"]; //--> ordered after their keys key1,key2,key3 

EDIT 基本上我需要該方法的相反:

- keysSortedByValueUsingComparator: // -> valuesSortedByKeyUsingComparator: 

任何幫助表示讚賞。

+0

Ÿ不ü排序allKeys陣列根據您的要求? –

+0

嗯......也許我不瞭解你。但我需要allValues作爲數組。按鍵排序。 –

+0

如果你排序allKeys,那麼你可以枚舉排序後的所有鍵,並獲得它們的值! –

回答

0

您可以將按鍵按字母順序第一個排序:

sortedKeyArray = [[mydict allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

,並通過此有序陣列枚舉:

[sortedKeyArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
    [sortedValueArray addObject:mydict[obj]; 
}]; 

現在你已經在sortedValueArray排序值

+0

你可以使用'objectsForKeys:notFoundMarker:'來獲取對象。 – Willeke