可能重复:
Sorting NSString values as if NSInteger using NSSortDescriptor
我有一个我用NSMutableDictionary填充的数组..我用它:
myArray =[[myDict allKeys]sortedArrayUsingSelector:@selector(IDONTKNOW:)];
myDicts的AllKeys是NSStrings ......比如123.423或423.343 ...我需要用增量数字对新的myArray进行排序.. 12.234 45.3343 522.533 5432.66等等
必须在@selector中插入什么才能正确执行此操作?感谢
答案 0 :(得分:20)
您可以使用NSSortDescriptor
并传递doubleValue
作为密钥。
//sfloats would be your [myDict allKeys]
NSArray *sfloats = @[ @"192.5235", @"235.4362", @"3.235", @"500.235", @"219.72" ];
NSArray *myArray = [sfloats sortedArrayUsingDescriptors:
@[[NSSortDescriptor sortDescriptorWithKey:@"doubleValue"
ascending:YES]]];
NSLog(@"Sorted: %@", myArray);
答案 1 :(得分:5)
您无法直接使用sortedArrayUsingSelector:
。使用sortedArrayUsingComparator:
并自行实施比较块。
有点像这样q / a:
Changing the sort order of -[NSArray sortedArrayUsingComparator:]
(事实上,该问题的代码可能会被复制/粘贴到您的代码中,并且只有在您将其从integerValue
更改为doubleValue
以获得四个转换字符串时,它才会“正常工作”拨号号码:
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
double n1 = [obj1 doubleValue];
double n2 = [obj2 doubleValue];
if (n1 > n2) {
return (NSComparisonResult)NSOrderedDescending;
}
if (n1 < n2) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
答案 2 :(得分:0)
考虑sortedArrayUsingFunction:
。这允许您定义比较元素时要使用的自定义比较函数。
myArray =[[myDict allKeys]sortedArrayUsingFunction:SortAsNumbers context:self];
NSInteger SortAsNumbers(id id1, id id2, void *context)
{
float v1 = [id1 floatValue];
float v2 = [id2 floatValue];
if (v1 < v2) {
return NSOrderedAscending;
} else if (v1 > v2) {
return NSOrderedDescending;
}
return NSOrderedSame;
}