3

我正在尝试使用 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
4

2 回答 2

13
  1. 请不要id投到person *. 该类型id与任何 Objective-C 对象类型隐式兼容,因此强制转换是无用的,它只会降低可读性。

  2. 此外,类名应以大写字母开头。最好为你的班级命名Person,不要person

  3. 实际问题有点类似于字典排序:


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;
    }
}];
于 2013-09-02T14:52:03.230 回答
5

我建议使用NSSortDescriptors进行排序:

NSArray *sortdesc = @[
                      [NSSortDescriptor sortDescriptorWithKey:@"value" ascending:YES],
                      [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES]
                     ];
NSLog(@"%@", [array sortedArrayUsingDescriptors:sortdesc]);
于 2013-09-02T15:04:26.553 回答