同时对多个 NSArray 进行排序 - iOS
Sort multiple NSArray at the same time - iOS
我有一个 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" 数组进行排序,这很好,但是如果我只对距离数组进行排序,那么其他两个数组的顺序将不正确。那么如何对其他两个数组进行排序?
丹,谢谢你的时间。
创建一个名为 Person
的 NSObject
属性 name
、address
、distance
Person.h
@interface Person : NSObject
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *address;
@property (assign, nonatomic) float distance;
@end
Person.m
@implementation Person
@synthesize name;
@synthesize address;
@synthesize distance;
@end
在您的视图控制器中,只使用 1 个包含 Person class' 对象的数组,而不是 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
}];
希望,你会明白的。它也将满足您的需求。
谢谢。
我有一个 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" 数组进行排序,这很好,但是如果我只对距离数组进行排序,那么其他两个数组的顺序将不正确。那么如何对其他两个数组进行排序?
丹,谢谢你的时间。
创建一个名为 Person
的 NSObject
属性 name
、address
、distance
Person.h
@interface Person : NSObject
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *address;
@property (assign, nonatomic) float distance;
@end
Person.m
@implementation Person
@synthesize name;
@synthesize address;
@synthesize distance;
@end
在您的视图控制器中,只使用 1 个包含 Person class' 对象的数组,而不是 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
}];
希望,你会明白的。它也将满足您的需求。
谢谢。