2012-02-27 36 views
2

我正在從服務器拉取XML訂閱源,該訂閱源包含火車站及其經緯度位置。使用其中一個鍵內的值對NSDictionaries數組進行排序

我已經設法創建了一個NSArray完整的NSDictionary對象,每個對象都對應一個工作站。

在字典中有一個關鍵爲緯度和關鍵爲經度。我還有一個CLLocation對象與設備的位置。

我知道如何計算設備和每個站之間的距離,但距離不是字典的一部分。我想按距離設備的順序對陣列​​進行排序。

我該怎麼做?不知道從哪裏開始,谷歌或我的書對我沒有什麼幫助!任何幫助深表感謝。

+2

這個職位有回答你的問題:http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it][1 ] [1]:http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it – Boon 2012-02-27 22:03:20

+0

謝謝,我使用的塊的方法 – 2012-02-29 13:18:21

+0

如果有其他人遇到這樣的問題 - 使數組變爲可變,則使用快速枚舉創建一個方法爲每個字典添加另一個字段。使用塊進行排序(如上面的鏈接所述) – 2012-02-29 13:19:28

回答

8

使用以下內容;

NSArray *sortedArray; 
sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *first, NSDictionary *second) { 
    // Calculate distances for each dictionary from the device 
    // ... 
    return [firstDistance compare:secondDistance]; 
}]; 
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; 
} 
+0

你可以 - 他有一系列字典。 – jrtc27 2012-02-27 22:14:45

相關問題