同时对多个 NSArray 进行排序 - iOS

问题描述 投票:0回答:1

我有一个 iOS 应用程序,它从服务器下载一些数据。数据包括三个主要部分:名称(字符串)、地址(字符串)和距离(浮点型)。

上述数据存储在三个简单的

NSArray
中。但是我想对数据进行排序,以便结果以以下格式显示:最低距离优先 -> 最高距离。

我正在使用Apple的

sortedArrayUsingComparator
方法对距离数组进行排序。但是我有一个问题...如何对另外两个
NSArray
执行相同的排序操作,以便正确显示数据?

这是我迄今为止尝试过的:

NSArray *nameData = // string data.....
NSArray *addressData = // string data.....
NSArray *distanceData = // float data.....

distanceData = [distanceData sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

    if ([obj1 floatValue] > [obj2 floatValue]) {
        return NSOrderedDescending;
    }

    else if ([obj1 floatValue] < [obj2 floatValue]) {
        return NSOrderedAscending;
    }

    return NSOrderedSame;
}];

如您所见,上面的代码将对“distanceData”数组进行排序,这很好,但如果我只对距离数组进行排序,那么其他两个数组的顺序将不正确。那么如何对另外两个数组进行排序呢?

感谢您抽出时间,丹。

objective-c sorting floating-point nsarray comparator
1个回答
2
投票

创建一个名为

Person
且类型为
NSObject
且具有属性
name
address
distance

的类

人.h

@interface Person : NSObject

@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *address;
@property (assign, nonatomic) float distance;

@end

人.m

@implementation Person

@synthesize name;
@synthesize address;
@synthesize distance;

@end

在视图控制器中,仅使用 1 个具有 Person 类对象的数组,而不是 3 个数组。

arrPersons = //...Person objects;

在这里,您将获得所有值。例如:

Person *p = [arrPersons objectAtIndex:0];
//p.name
//p.address
//p.distance

这样,Person对象就有了多个值。根据其名为

distance
的属性,您可以执行排序。因此,您将获得更新的 Person 对象。在这个对象中,所有值都将被排序。

NSArray *sortedArray;
sortedArray = [arrPersons sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    float first = [(Person*)a distance];
    float second = [(Person*)b distance];
    return first > second; //Here, you can use > or < as per ASC or DESC
}];
© www.soinside.com 2019 - 2024. All rights reserved.