使用compare:selector比较数组中的浮点数

时间:2011-11-01 20:19:21

标签: iphone ios cocoa

我有一个应用程序从服务器检索大量数值数据并将其保存到NSMUtableArray。现在值是浮点数,看起来像10.0; 11.2; 30.003; 109.23等。

现在我使用sortUsingSelector(@selector(compare:))方法对数组进行排序,以找到最大值和最小值。我的输出如下:

10.0 109.23 11.2 30.003

现在我假设compare:选择器将值视为字符串并相应地对它们进行排序。但那不是我想要的。我希望根据浮点值对值进行排序。 所以我的问题是:有没有办法根据浮动数组的数值对它们进行排序?

2 个答案:

答案 0 :(得分:3)

比较可能有一个捷径,并且没有错误检查,但是这样的事情应该可以解决问题:

NSArray* sorted = [unsorted sortedArrayWithOptions:0 usingComparator:^(id v1, id v2) {
  float f1 = [v1 floatValue];
  float f2 = [v2 floatValue];

  if (f1 == f2) return NSOrderedSame;
  return (f1 < f2) ? NSOrderedAscending : NSOrderedDescending;
}];

或者您可以将值存储为NSNumber

答案 1 :(得分:1)

您应该将它们存储为NSNumber而不是NSStrings。您当前正在添加到阵列的位置,请执行以下操作:

[myArray addObject:[NSNumber numberWithFloat:incomingFloat]];

现在比较选择器将按数字顺序排序。