在iOS中对包含字母数字单词的数组进行排序

时间:2013-12-24 09:43:18

标签: ios iphone objective-c sorting nssortdescriptor

我有一个包含10个元素的数组,这些元素默认排序,这是现在的当前日志。

for (int i=0;i<products.count; i++)
{
     NSLog(@"%@",products[i]);
}

输出:

Product1
Product10
Product2
Product3
Product4
Product5
Product6
Product7
Product8
Product9

我需要按以下顺序对其进行排序:

Product1
Product2
Product3
Product4
Product5
Product6
Product7
Product8
Product9
Product10

我目前的方法是扫描出数字并根据它进行排序,我想知道iOS中是否有其他方法或默认方法可以做到这一点,或者我是否必须坚持使用我当前扫描数字的方法在每个元素中然后排序??

2 个答案:

答案 0 :(得分:17)

您可以使用此代码对数组进行排序。使用NSNumericSearch搜索字符串中的数值。

NSArray * products = [[NSArray alloc] initWithObjects:@"Product1",
                                                      @"Product10",
                                                      @"Product2",
                                                      @"Product3",
                                                      @"Product4",
                                                      @"Product5",
                                                      @"Product6",
                                                      @"Product7",
                                                      @"Product8",
                                                      @"Product9",
                                                      nil];

products = [products sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
    }];

NSLog(@"products : %@", products);

日志显示:

products : (
    Product1,
    Product2,
    Product3,
    Product4,
    Product5,
    Product6,
    Product7,
    Product8,
    Product9,
    Product10
)

答案 1 :(得分:-1)

NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc]initWithKey:@"YourKeyName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];


self.products = [[self.products sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDesc, nil]] mutableCopy];

有关详细信息Apple Documentation