使用自定义对象对NSMutableArray进行排序

时间:2016-01-07 21:19:05

标签: ios objective-c sorting nsmutablearray

我有一个带有NSMutableArray的iOS应用,其中包含多行数据(分为3段) - 如下所示:

[PFUser object, stringData, floatValue]
       .             .          4.3
       .             .          5.9
       .             .          1.1
       .             .          9.32
       .             .          0.024

上图显示了如何拆分数组以及存储在数组中的数据类型。但这些数据类型不是键或任何东西。所以我不能做valueForKey

之类的事情

数组的示例:

@[@[userObject, @"hello", @234.1441],
  @[userObject, @"sdfsg", @94.33],
  @[userObject, @"wrfdo", @24.897]
];

所以从上面的例子中你可以看到我在数组中有数组。

我想通过读取包含浮点值的3段来对数组进行排序。

我该怎么做?我已经在网上看了很多关于使用NSSortDescriptor的内容,但我遇到的问题是所有的例子似乎总是使用简单的字符串或仅带数字的数组。

有没有办法在像我这样的自定义对象的数组中使用NSSortDescriptor

3 个答案:

答案 0 :(得分:4)

您可以使用sortUsingComparator:

[array sortUsingComparator:^(id obj1, id obj2) {
    NSArray *arr1 = obj1;
    NSArray *arr2 = obj2;
    return [arr1[2] compare:arr2[2]];
}];

甚至(感谢rmaddy的建议):

[array sortUsingComparator:^(NSArray *arr1, NSArray *arr2) {
    return [arr1[2] compare:arr2[2]];
}];

如果您有不可变数组,则可以使用sortedArrayUsingComparator:

答案 1 :(得分:3)

试试这个:

例如,在您的情况下,按浮点值对数组进行排序:

NSMutableArray *array = // Init your array;

array = [NSMutableArray arrayWithArray:[array sortedArrayUsingComparator:^(id obj1, id obj2) {
    float value1 = [[obj1 objectAtIndex:2] floatValue];
    float value2 = [[obj2 objectAtIndex:2] floatValue];

    if (value1 < value2) {
        return (NSComparisonResult)NSOrderedDescending;
    } else if (value1 > value2) {
        return (NSComparisonResult)NSOrderedAscending;
    } else {
        return (NSComparisonResult)NSOrderedSame;
    }
}]];

使用此方法,您可以根据需要进行排序。

答案 2 :(得分:0)

NSMutableArray有一个调用sortUsingComparator,它将比较结果块作为参数。所以像这样:

[users sortUsingComparator:
     ^NSComparisonResult(id obj1, id obj2)
     {
         PFUser* userA = (PFUser*)obj1;
         PFUser* userB = (PFUser*)obj2;

        return [userA.floatValue compare:userB.floatValue];

     }];