我必须对字典数组进行排序,但我必须按字典中的对象进行排序。对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. 如何排序包含NSDictionary的NSArray?
- 6. 如何使用嵌套的NSArray对NSArray进行排序
- 7. 如何使用嵌套NSArray对NSArray进行排序
- 8. 根据NSArray元素排序NSDictionary键
- 9. 对包含自定义对象的NSArray进行排序
- 10. Objective C NSDictionary:如何根据键的值对我的NSDictionary键进行排序
- 11. 按特定顺序对NSArray进行排序
- 12. 如何通过数值对包含NSDictionary的NSMutableArray进行排序?
- 13. Objective-C:基于字典条目对NSDictionary的键进行排序
- 14. NSArray内的NSDictionary
- 15. 如何对此NSArray的元素进行排序?
- 16. 如何使用不同的排序功能对NSArray进行排序
- 17. 根据日期对NSDictionary数组进行排序
- 18. 如何通过NSSortDiscriptor对NSArray进行排序?
- 19. 如何用日期时间值对NSArray进行排序?
- 20. 的NSDictionary的NSArray和
- 21. NSDictionary to ordered NSArray
- 22. NSDictionary到NSArray?
- 23. NSArray的排序
- 24. NSArray的排序:
- 25. 排序的NSArray
- 26. NSArray的排序
- 27. 包含NSArray的NSDictionary
- 28. 搜索nsdictionary的nsarray
- 29. NSDictionary的NSArray的过滤器和NSDictionary的
- 30. 通过NSDate属性对自定义对象的NSArray进行排序
还是这个,是的......我总是忘了排序描述符。 – bbum 2010-10-13 16:08:15
我还没有机会自己钻研(没有10.6的项目),但迫不及待地开始。 :-) – 2010-10-13 16:14:38
好的,thx!明天我尝试实现这个逻辑 – Kazzar 2010-10-13 21:28:21