按其中一个键内的值对Dictionaries数组进行排序

时间:2012-02-27 21:56:20

标签: ios objective-c sorting nsarray nsdictionary

我从服务器提取 XML Feed,该Feed包含火车站及其纬度和经度位置。

我设法创建了一个NSArrayNSDictionary个对象,每个对象对应一个电台。

在词典中,有一个纬度的键和经度的键。我还有一个CLLocation对象,其中包含设备的位置。

我知道如何计算设备与每个电台之间的距离,但距离不是字典的一部分。我想按距离设备的顺序对数组进行排序。

我该怎么做?不知道从哪里开始,谷歌或我的书对我没有多大帮助!非常感谢任何帮助。

2 个答案:

答案 0 :(得分:9)

使用以下内容;

NSArray *sortedArray;
sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *first, NSDictionary *second) {
    // Calculate distances for each dictionary from the device
    // ...
    return [firstDistance compare:secondDistance];
}];

答案 1 :(得分:3)

不幸的是,您无法对NSDictionary对象进行排序。你应该创建NSMutableArray并改为排序。

请参阅此内容 - Collections Programming Topics - Sorting Arrays

<强>更新 要对字典数组进行排序,您可以使用例如NSArray的这种方法:

sortedArray = [someArray sortedArrayUsingFunction:compareElements context:NULL];

compareElements函数示例:

NSInteger compareElements (id num1, id num2, void *context)
{
    int v1 = [[num1 objectForKey:@"distance"] integerValue];
    int v2 = [[num2 objectForKey:@"distance"] integerValue];
    if (v1 < v2)
        return NSOrderedAscending;
    else if (v1 > v2)
        return NSOrderedDescending;
    else
        return NSOrderedSame;
}