我有一个人对象,它具有该人不同电话号码的 NSString 属性 firstname、lastname、birthday 和 NSMutableDictionary。
我必须在数组中添加不同的人对象并按他们的年龄对这些对象进行排序,我有计算他们年龄的方法,但不确定如何将计算出的年龄与现有的所有人对象数组联系起来并对其进行排序。
请帮忙。
我有一个人对象,它具有该人不同电话号码的 NSString 属性 firstname、lastname、birthday 和 NSMutableDictionary。
我必须在数组中添加不同的人对象并按他们的年龄对这些对象进行排序,我有计算他们年龄的方法,但不确定如何将计算出的年龄与现有的所有人对象数组联系起来并对其进行排序。
请帮忙。
我对你的理解正确吗?您想按人的年龄对数组进行排序吗?
-sortedArrayUsingComparator:
使用NSArray的方法可以很容易地进行排序。假设一个人有一个名为 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];
}];
如果要按特定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.
希望这就是你的意思。
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];
}];