2011-04-16 78 views
2

我需要使用字典中的鍵控對象對字典數組進行排序。該對象是一個包含浮點數的NSString。我使用了NSSortDescriptor,但它按字母順序排序。我將如何讓自定義選擇器或比較器以數字形式進行操作?如何對字典數組排序

回答

5

這應該給你的這樣一個使用NSComparator塊來完成一個想法:

[array sortUsingComparator:(NSComparator)^(id obj1, id obj2){ 
    double firstValue = [[obj1 objectForKey:@"someKey"] doubleValue]; 
    double secondValue = [[obj2 objectForKey:@"someKey"] doubleValue]; 
    double valueDiff = firstValue - secondValue; 
    return (valueDiff == 0) ? NSOrderedSame : (valueDiff < 0) ? NSOrderedAscending : NSOrderedDescending; 
}]; 

obj1obj2是ID指向數組中一對字典的對象。不管你在NSComparator塊內做什麼都取決於你。只要您返回NSOrderedSame,NSOrderedAscendingNSOrderedDescending

通常,使用真正的數字數據類型(àla [NSNumber numberWith...:x])可能比字符串更適合保存這樣的浮點值。

+0

感謝您的幫助。這工作完美。我正在考慮重寫我的應用程序,將NSString更改爲NSNumbers。我真的不想這樣做,但我認爲從長遠來看會更好。在我發佈它之前,最好做到這一點,而不是在向公衆發佈之後嘗試修復它。 – syclonefx 2011-04-16 05:31:23