can*_*boy 0 iphone objective-c nsarray ios
如果我有一个带有几个字典对象的NSArray(或可变数组)(每个字典都是Person),就像这样:
[
{ forename: chris, surname: smith, age: 22 }
{ forename: paul, surname: smith, age: 24 }
{ forename: dave, surname: jones, age: 21 }
{ forename: alan, surname: jones, age: 26 }
{ forename: cecil, surname: reeves, age: 32 }
{ forename: pablo, surname: sanchez, age: 42 }
]
Run Code Online (Sandbox Code Playgroud)
我如何将它分成四个数组的数组,按姓氏(并在该名称中)排序,如下所示:
[
[
{ forename: alan, surname: jones, age: 26 }
{ forename: dave, surname: jones, age: 21 }
]
[
{ forename: cecil, surname: reeves, age: 32 }
]
[
{ forename: pablo, surname: sanchez, age: 42 }
]
[
{ forename: chris, surname: smith, age: 22 }
{ forename: paul, surname: smith, age: 24 }
]
]
Run Code Online (Sandbox Code Playgroud)
你可以使用键值编码和谓词做一些非常整洁的东西......
//retrieve an array of the distinct surnames
NSArray * distinctSurnames = [peopleArray valueForKeyPath:@"@distinctUnionOfObjects.surname"];
//at this point, if you need the surnames in a specific order, you can do so here.
NSMutableArray * groupedPeople = [NSMutableArray array];
//for each of the surnames...
for (NSString * surname in distinctSurnames) {
//create a predicate to only find people with this surname
NSPredicate * filter = [NSPredicate predicateWithFormat:@"surname = %@", surname];
//retrieve only the people with this surname and add them to the final array
[groupedPeople addObject:[peopleArray filteredArrayUsingPredicate:filter]];
}
Run Code Online (Sandbox Code Playgroud)
Person只要字典具有@"surname"键或Person对象具有-(NSString *)surname方法,这将适用于对象(可能更好)或字典.
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |