我必須對字典數組進行排序,但我必須按字典中的對象進行排序。對NSDictionary的NSArray進行排序
3
A
回答
13
使用NSSortDescriptors和-sortedArrayUsingDescriptors :.對於關鍵路徑,傳入字典鍵,然後傳入您想要排序的對象的鍵。在下面的例子中,你有一個字典數組,這些字典在「personDictionaryKey」下有一個人,而「person」有一個「lastName」鍵。
NSSortDescriptor * descriptor = [[[NSSortDescriptor alloc] initWithKey:@"personInDictionary.lastName"
ascending:YES] autorelease]; // 1
NSArray * sortedArray = [unsortedArray sortedArrayUsingDescriptors:
[NSArray arrayWithObject:descriptor]];
1 -在10.6有創建排序描述符類方便的方法,但作爲bbum的回答說,現在有排序的方法和我打賭他們是快了不少啓用塊,。另外,我注意到你的問題是針對iOS的,所以這可能是無關緊要的。 :-)
1
要改寫;你想通過比較字典內容來排序數組? (也就是說,你知道你無法對詞典的內容進行排序,對吧?)
正如約書亞所說,使用NSSortDescriptor
和sortedArrayUsingDescriptors:
。這很可能是最好的解決方案;至少最直接的。
還有其他的方法。
假設您的目標是iOS 4.0,那麼您可以使用sortedArrayUsingComparator:
並傳遞一個塊來比較兩個字典的內容。
如果您的目標是iOS 3.x(包括iPad),那麼您將使用sortedArrayUsingFunction:context:
。
或者,如喬舒亞建議,使用NSSortDescriptor
和sortedArrayUsingDescriptors:
所有這些都相當有據可查,有例子。
0
這裏是自定義的執行對象,而不是字典:
ArtistVO *artist1 = [ArtistVO alloc];
artist1.name = @"Trentemoeller";
artist1.imgPath = @"imgPath";
ArtistVO *artist2 = [ArtistVO alloc];
artist2.name = @"ATrentemoeller";
artist2.imgPath = @"imgPath2";
ArtistVO *artist3 = [ArtistVO alloc];
artist3.name = @"APhextwin";
artist3.imgPath = @"imgPath2";
//NSLog(@"%@", artist1.name);
NSMutableArray *arr = [NSMutableArray array];
[arr addObject:artist1];
[arr addObject:artist2];
[arr addObject:artist3];
NSSortDescriptor *lastDescriptor =
[[[NSSortDescriptor alloc]
initWithKey:@"name"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
NSArray * descriptors =
[NSArray arrayWithObjects:lastDescriptor, nil];
NSArray * sortedArray =
[arr sortedArrayUsingDescriptors:descriptors];
NSLog(@"\nSorted ...");
NSEnumerator *enumerator;
enumerator = [sortedArray objectEnumerator];
ArtistVO *tmpARt;
while ((tmpARt = [enumerator nextObject])) NSLog(@"%@", tmpARt.name);
相關問題
- 1. iOS - 目標C,通過鍵名對NSDictionary的NSArray進行排序
- 2. 對NSArray進行排序並返回NSArray?
- 3. 與對象進行排序的NSArray
- 4. 如何對NSArray進行排序?
- 5. 如何對NSArray進行自然排序?
- 6. 如何排序包含NSDictionary的NSArray?
- 7. 如何使用嵌套的NSArray對NSArray進行排序
- 8. 如何使用嵌套NSArray對NSArray進行排序
- 9. 根據NSArray元素排序NSDictionary鍵
- 10. 如何對NSArray進行排序並在NSString中進行訪問?
- 11. 如何將對象的NSArray排序爲按字母順序排列的NSDictionary?
- 12. 對包含自定義對象的NSArray進行排序
- 13. Objective C NSDictionary:如何根據鍵的值對我的NSDictionary鍵進行排序
- 14. 按特定順序對NSArray進行排序
- 15. 按相反順序對NSArray進行排序
- 16. 使用自定義順序對NSArray進行排序
- 17. 對包含NSNumber變量的NSobjects的NSArray進行排序
- 18. 在Swift中使用複雜的.plist對NSDictionary進行排序
- 19. Objective-C:基於字典條目對NSDictionary的鍵進行排序
- 20. 如何通過數值對包含NSDictionary的NSMutableArray進行排序?
- 21. 如何在ios中對多個NSArray升序和降序排序進行排序
- 22. NSArray內的NSDictionary
- 23. NSArray內的NSDictionary
- 24. 如何對此NSArray的元素進行排序?
- 25. 如何使用NSPredicate對NSStrings的NSArray進行排序?
- 26. 如何根據NSMutableDictonary的值對NSArray進行排序
- 27. 在NSArray裏面的NSDictionary中排列NSDates?
- 28. 如何使用不同的排序功能對NSArray進行排序
- 29. 如何使用另一個包含對象的有序鍵的NSArray對NSArray對象進行排序?
- 30. 根據日期對NSDictionary數組進行排序
還是這個,是的......我總是忘了排序描述符。 – bbum 2010-10-13 16:08:15
我還沒有機會自己鑽研(沒有10.6的項目),但迫不及待地開始。 :-) – 2010-10-13 16:14:38
好的,thx!明天我嘗試實現這個邏輯 – Kazzar 2010-10-13 21:28:21