关于ios:按其中一个键中的值对字典数组进行排序

Sort array of NSDictionaries by a value inside one of the keys

本问题已经有最佳答案,请猛点这里访问。

我正在从服务器中提取XML提要,提要包含火车站及其纬度和经度位置。

我已经成功地创建了一个装满NSDictionary对象的NSArray,每个对象对应一个站点。

字典中有一个表示纬度的键和一个表示经度的键。我还有一个带有设备位置的CLLocation对象。

我知道如何计算设备和每个站点之间的距离,但是距离不是字典的一部分。我想按照距离设备的距离对阵列进行排序。

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


使用以下内容:

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

很遗憾,您无法对nsdictionary对象进行排序。您应该创建NSmutableArray并对其进行排序。

请参见-集合编程主题-排序数组

更新:要对字典数组进行排序,您可以使用例如nsarray的此方法:

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

CompareElements函数示例:

1
2
3
4
5
6
7
8
9
10
11
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;
}