我有NSStrings的NSArray,但有些字符串只是数字。我如何正确排序数字?

时间:2011-09-11 00:31:42

标签: iphone cocoa-touch cocoa ipad

我的NSArray包含100,110,91,98和87,所有NSStrings。

我想按顺序排列它们:87,91,98,100,110。

相反,它们显示为100,110,87,91,98。

遗憾的是,无法使用所有整数而不是字符串启动数组。任何人都有任何想法如何判断数组是否只包含字符串中的数字,也许使用for循环?然后我可以将它们全部转换为数组中的整数并按此方式进行排序。或者也许有一种我想念的简单方法?

如果有人有任何想法,请告诉我。

2 个答案:

答案 0 :(得分:6)

您可以使用NSString比较函数的NSNumericSearch选项以数字方式对字符串进行排序。要使用NSArray执行此操作,您需要编写一个块或函数来调用compare:options:方法。

NSArray *theStrings; // Contains strings, some of which are numbers
NSArray *theSortedStrings = [theStrings sortedArrayUsingComparator:^(id obj1, id obj2) {
    return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];

如果字符串中有一个数字,也会按数字排序,即"abcd89"将出现在"abcd123"之前。

答案 1 :(得分:1)

a whole mess of options for sorting an array;这不是问题。

排序方法总是按顺序放置对象。订单取决于对象或您自己。

所以你需要做的是以下之一:

  1. 获取字符串以数字方式进行比较。
  2. 让阵列让你比较它们,然后用数字比较它们。
  3. 第一门是一招半。 NSString和其他类集群不允许您继承实现;你可以创建自己的字符串类,但是你基本上需要从头做任何事情(或者在字符串中包装一个字符串并将除compare:之外的每条消息转发给它)。

    门2号更容易。几乎每一个排序方法都采用你实现的块或函数;无论哪种方式,块/函数从数组中获取两个对象,比较它们,并返回它们所在的顺序。

    您的块/函数应将a compare:options: message发送到它收到的两个字符串之一,并传递the NSNumericSearch option,然后返回结果。

    NSArray询问字符串的比较方式,并询问字符串如何在数字上进行比较,然后数组将按数字顺序对其对象进行排序。