您好我有一组人,我正在尝试使用排序描述符按年龄对它们进行排序。 患者的年龄字段是字符串,所以在致电时:
ageSorter = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
[personList sortUsingDescriptors:[NSArray arrayWithObject:ageSorter]];
它对它们进行排序,但首先出现100,因为它在比较选项中没有使用numericSearch。
有没有一种方法我仍然可以使用描述符排序,但可能使用选择器来更改如何比较字符串?
答案 0 :(得分:1)
finderSortWithLocale方法(这些都来自apple api):
int finderSortWithLocale(Person *person1, Person *person2, void *locale)
{
static NSStringCompareOptions comparisonOptions = NSNumericSearch;
NSRange string1Range = NSMakeRange(0, [string1 length]);
NSString *age1 = person1.age;
NSString *age2 = person2.age;
return [age1 compare:age2
options:comparisonOptions
range:string1Range
locale:(NSLocale *)locale];
}
如何调用此方法(已编辑:调用人员数组上的函数):
NSArray *sortedArray = [personList sortedArrayUsingFunction:finderSortWithLocale
context:[NSLocale currentLocale]];
答案 1 :(得分:1)
我也面临同样的问题,发现answer here.
而不是NSString
比较,与您的对象属性。即age
。
实施例。 :按升序排列:
NSArray *sortedArray = [_arrayCaptureLeadList sortedArrayUsingComparator:^(Person *obj1, Person *obj2) {
return [obj1.age compare:obj2.age options:NSNumericSearch];
}];
NSMutableArray *filterResultArray = [NSMutableArray arrayWithArray:sortedArray];
按降序排列:
NSArray *sortedArray = [_arrayCaptureLeadList sortedArrayUsingComparator:^(Person *obj1, Person *obj2) {
return [obj2.age compare:obj1.age options:NSNumericSearch];
}];
NSMutableArray *filterResultArray = [NSMutableArray arrayWithArray:sortedArray];
我知道回复你的问题已经很晚了,但这可能会对其他人有所帮助。 ^ _ ^
答案 2 :(得分:0)
您可以在NSString上创建一个类别,该类别添加方法numericCompare:
并调用[self compare:otherString options:NSNumericSearch]
。另一种选择是将年龄字段转换为NSNumber
而不是NSString
。另一个选项涉及NSComparator
块和sortUsingComparator
。