iam尝试使用api sortedArrayUsingComparator
对包含2个数字的对象进行排序array1= [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
person *p1 = (person*)obj1;
person *p2 = (person*)obj2;
if (p1.value>p2.value && p1.age>p2.age)
{
return (NSComparisonResult)NSOrderedAscending;
}
else
return (NSComparisonResult)NSOrderedDescending;
}];
我想让代码对这样的东西进行排序,,,,
input : 0 1
1 2
0 9
1 4
2 3
output: 0 1
0 9
1 2
1 4
2 3
答案 0 :(得分:10)
请不要将id
投射到person *
。类型id
与任何Objective-C对象类型隐式兼容,因此转换是无用的,只会降低可读性。
此外,班级名称应以大写字母开头。更好地命名您的课程Person
,而不是person
。
实际问题与词典排序有些相似:
NSArray *sorted = [unsorted sortedArrayUsingComparator:^NSComparisonResult(id lhs, id rhs) {
Person *p1 = lhs, *p2 = rhs;
if (p1.value > p2.value) {
return NSOrderedAscending;
} else if (p1.value < p2.value) {
return NSOrderedDescending;
} else {
if (p1.age > p2.age)
return NSOrderedAscending;
else if (p1.age < p2.age)
return NSOrderedDescending;
else
return NSOrderedSame;
}
}];
答案 1 :(得分:5)
我建议使用NSSortDescriptors进行排序:
NSArray *sortdesc = @[
[NSSortDescriptor sortDescriptorWithKey:@"value" ascending:YES],
[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES]
];
NSLog(@"%@", [array sortedArrayUsingDescriptors:sortdesc]);