sortedArrayUsingComparator在排序数组中包含具有2个数字的对象

时间:2013-09-02 14:46:15

标签: ios

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

2 个答案:

答案 0 :(得分:10)

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

  2. 此外,班级名称应以大写字母开头。更好地命名您的课程Person,而不是person

  3. 实际问题与词典排序有些相似:


  4. 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]);