0

我有一个NSArraywith 值,我从一个NSDictionary使用选择器进行排序的值中提取,它具有以下值:

  1. 约翰
  2. 布赖恩
  3. 亚历克斯……
  4. 戴夫

当我使用下面的代码时,由于将它们作为字符串进行比较,因此列表返回:

NSArray *array = [[[self myDictionary] allValues] sortedArrayUsingSelector:@selector(compare:)];
  1. 约翰
  2. 戴夫
  3. 布赖恩...

如何让这些值按 1、2、3 等顺序正确排序?我查看了几个不同的排序示例,但找不到像我这样的示例。我还必须提到,我是 Objective-c 和 iOS 的新手。任何帮助将不胜感激。

谢谢!

4

1 回答 1

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];
于 2012-04-26T17:28:45.147 回答