2011-04-16 64 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