【问题标题】:how to sort an NSArray of float values?如何对浮点值的 NSArray 进行排序?
【发布时间】:2011-09-30 12:30:05
【问题描述】:

我有一个这样的 NSArray:

如何使用如下值对 NSarray 浮点数进行排序:122.00,45.00,21.01,5.90

【问题讨论】:

  • 如何在 NSArray 中存储浮点数?
  • 顺便说一句:你的花车是按降序排列的。

标签: iphone objective-c cocoa-touch


【解决方案1】:

@Ron's answer 是完美的,但我想通过使用比较器块添加排序。对于这种琐碎的情况,它可能有点矫枉过正,但在针对多个属性对对象进行排序时,它非常方便

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;
}];

【讨论】:

    【解决方案2】:

    试试这个对我有用

    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:)];
    

    【讨论】:

      【解决方案3】:

      这里...使用NSSortDescriptor

      首先将浮点值转换为NSNumber

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

      希望对你有帮助:)

      【讨论】:

      • 我试过了,但它不能工作。 NSNumber 没试过,谢谢回复
      • 你把float改成NSNumber了吗?
      • 这确实行不通。 NSNumber 不是符合 @"floats" 的键值编码。试试@"floatValue"。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      相关资源
      最近更新 更多