我有一个数组(Say personObjectArray ),其中包含类 Person 的对象。
类人有2个变量说,
NSString *name, NSString *age
。
此处年龄的类型为nsstring。
现在当我在下面排序时,
personObjectArray = [[personObjectArray sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2){
return [p1.age compare:p2.age];
}] mutableCopy];
这样排序,
1, 11, 123 2, 23, 3 ...它按字母顺序排序,而不是将其视为数字。
所以我改变了我的代码,
personObjectArray = [[personObjectArray sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2){
return [[p1.age intValue] compare:[p2.age intValue] ];
}] mutableCopy];
它说,Bad receiver type 'int'
我现在怎么排序? 请不要告诉我更改人类中年龄的数据类型。我无法改变它。任何帮助表示感谢(:,感谢您的时间。
答案 0 :(得分:2)
您在基元(非对象)类型int
上使用比较,因此它不起作用。
试试这个
return [@([p1.age intValue]) compare:@([p2.age intValue])];
这里,我们使用NSNumber(这是一个对象类型)来比较int值
@()是NSNumber的文字
希望这会对你有帮助..(:
答案 1 :(得分:0)
试试这个:
personObjectArray = [[personObjectArray sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2){
return [p1.age compare:p2.age options:NSNumericSearch];
}] mutableCopy];