NSArray排序

时间:2012-04-25 18:01:42

标签: sorting nsarray

我有NSArray的值,我使用选择器从NSDictionary中提取值,并使用具有以下值的排序:

  1. 约翰
  2. 布赖恩
  3. 亚历 ....
  4. 戴夫
  5. 当我使用下面的代码时,因为它们被比作字符串,所以列表会返回:

    NSArray *array = [[[self myDictionary] allValues] sortedArrayUsingSelector:@selector(compare:)];
    
    1. 约翰
    2. 戴夫
    3. 布赖恩 ...
    4. 如何让这些值在1,2,3等的顺序正确排序?我已经看了几个不同的排序示例,但是找不到像我这样的例子。我还必须提到我是Objective-c和iOS的新手。任何帮助将不胜感激。

      谢谢!

1 个答案:

答案 0 :(得分:1)

我实际上能够找到解决方案。我使用自定义逻辑创建了一个NSComparisonResult块来读取每个字符串前面的数字部分,然后用数字比较它们:

NSComparisonResult (^sortByNumber)(id, id) = ^(id obj1, id obj2)
{
    //Convert items to strings
    NSString *s1 = (NSString *)obj1;
    NSString *s2 = (NSString *)obj2;

    //Find the period and grab the number
    NSUInteger periodLoc1 = [s1 rangeOfString:@"."].location;
    NSString *number1 = [s1 substringWithRange:NSMakeRange(0, periodLoc1)];

    NSUInteger periodLoc2 = [s2 rangeOfString:@"."].location;
    NSString *number2 = [s2 substringWithRange:NSMakeRange(0, periodLoc2)];

    //Compare the numeric values of the numbers
    return [number1 compare:number2 options:NSNumericSearch];
};

然后我通过调用:

对数组进行排序
NSArray *array = [[[self myDictionary] allValues] sortedArrayUsingComparator:sortByNumber];