【问题标题】:how to sort an NSArray using compare:options如何使用 compare:options 对 NSArray 进行排序
【发布时间】:2010-01-09 01:46:26
【问题描述】:

我有一个包含数字作为 NSString 对象的 NSArray。 IE。

[array addObject:[NSString stringWithFormat:@"%d", 100]];

如何对数组进行数字排序?我可以使用compare:options 并将NSNumericSearch 指定为NSStringCompareOptions 吗?请给我一个示例/示例代码。

【问题讨论】:

    标签: iphone sorting compare nsarray


    【解决方案1】:

    您可以使用为sortedArrayUsingFunction:context: 方法提供的示例代码,它也应该适用于NSStrings,因为它们也有intValue 方法。

    // Place this functions somewhere above @implementation
    static NSInteger intSort(id num1, id num2, void *context)
    {
        int v1 = [num1 intValue];
        int v2 = [num2 intValue];
        if (v1 < v2)
            return NSOrderedAscending;
        else if (v1 > v2)
            return NSOrderedDescending;
        else
            return NSOrderedSame;
    }
    
    // And used like this
    NSArray *sortedArray; 
    sortedArray = [anArray sortedArrayUsingFunction:intSort context:NULL];
    

    【讨论】:

    • +1 你可以用这一行替换 intSort 的主体: return [(NSString*)num1 compare:num2 options:NSNumericSearch];
    • @gerry3 当然,我刚刚提取了 apple.com 提供的示例代码,看起来可以完成这项工作
    【解决方案2】:

    由于您的对象是数字,而不是使用 NSString 对象,您可以使用 NSNumber 对象(通过 stringValue 属性轻松转换为字符串)并使用 sortedArrayUsingDescriptors: 对数组进行排序。

    例如:

    NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
    NSArray *sorters = [[NSArray alloc] initWithObjects:sorter, nil];
    [sorter release];
    NSArray *sortedArray = [anArray sortedArrayUsingDescriptors:sorters];
    [sorters release];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多