我有一个人物对象,其中包含该人的不同电话号码的NSString属性firstname,lastname,birthday和NSMutableDictionary。
我要在数组中添加不同的人物对象,并按年龄对这些物体进行排序, 我有计算年龄的方法,但不知道如何将计算出的年龄与所有人物对象的现有数组相关联并对其进行排序。
请帮忙。
答案 0 :(得分:1)
我能理解你吗?你想按照这个人的年龄对你的阵列进行排序吗?
使用NSArray的-sortedArrayUsingComparator:
方法可以非常轻松地进行排序。假设一个人有一个名为age的属性,类型为NSInteger。我们可以像这样对数组进行排序:
// lets assume _persons_ is an array of Person objects ...
NSArray *sortedPersons = [persons sortedArrayUsingComparator: ^(Person *p1, Person *p2) {
if (p1.age > p2.age) {
return NSOrderedDescending;
}
if (p1.age < p2.age) {
return NSOrderedAscending;
}
return NSOrderedSame;
}];
当然,您可以在比较器中进行任何比较。例如。你可以比较日期,字符串等...你返回的NSComparisonResult会将数组中的项移动到正确的位置。
修改强>
以下内容可能适用于您的特定情况:
NSArray *sortedPersons = [persons sortedArrayUsingComparator: ^(Person *p1, Person *p2) {
NSDate *date1 = [p1.birthday asDate];
NSDate *date2 = [p2.birthday asDate];
return [date1 compare:date2];
}];
答案 1 :(得分:0)
如果您想按特定property
排序(例如age
),请使用NSSortDesriptor
:
NSArray * people = ... //your array of Person objects
NSSortDescriptor * sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
NSArray * sortedPeopleByAge = [people sortedArrayUsingDescriptors:@[sortDescriptor];
//sortedPeopleByAge are ... you know ... people sorted by age.
希望这就是你的意思。
答案 2 :(得分:0)
NSDateFormatter df = [NSDateFormatter new];
persons = [persons sortedArrayUsingComparator: ^(Person *p1, Person *p2) {
NSDate* d1 = [df dateFromString:p1.birthday];
NSDate* d2 = [df dateFromString:p2.birthday];
return [d1 compare:d2];
}];