如何对包含浮点数值的NSArray进行排序?

3

我有一个如下的NSArray:

如何按照 122.00、45.00、21.01、5.90 这样的值对 NSarray 中的浮点数进行排序?


如何在NSArray中存储浮点数? - vikingosegundo
顺便说一下:你的浮点数是有序的——降序。 - vikingosegundo
3个回答

11

试试这个,对我有用

NSArray *array=[[NSArray alloc] initWithObjects:[NSNumber numberWithFloat:12.01],[NSNumber numberWithFloat:13.01],[NSNumber numberWithFloat:10.01],[NSNumber numberWithFloat:2.01],[NSNumber numberWithFloat:1.5],nil];
NSArray *sorted = [array sortedArrayUsingSelector:@selector(compare:)];

11

@Ron的答案是完美的,但我想添加使用比较器块排序的功能。在这种微不足道的情况下,它可能有些过度,但当涉及到根据几个属性对对象进行排序时,它非常方便。

NSArray *myArray =[NSArray arrayWithObjects: [NSNumber numberWithFloat:45.0],[NSNumber numberWithFloat:122.0], [NSNumber numberWithFloat:21.01], [NSNumber numberWithFloat:5.9], nil];
NSArray *sortedArray = [myArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    if ([obj1 floatValue] > [obj2 floatValue])
        return NSOrderedDescending;
    else if ([obj1 floatValue] < [obj2 floatValue])
        return NSOrderedAscending;
    return NSOrderedSame;
}];

0

在这里...使用NSSortDescriptor

首先将浮点值转换为NSNumber

NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"floatValue"
                                              ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingDescriptors:sortDescriptors];

希望能有所帮助 :)

我尝试了,但它不能工作。NSNumber没有尝试过,谢谢回复。 - Chirag S
你把 float 改成 NSNumber 了吗? - Shrey
1
确实这样做不行。NSNumber不符合键值编码的@"floats"规范。请尝试使用@"floatValue"代替。 - vikingosegundo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接