基于多个属性对NSArray进行排序

时间:2012-07-10 06:35:16

标签: iphone objective-c ios ipad nsarray

这是我遇到的问题: - 我有一个数组

Item1,
Item2,
Item3,
Item4,
Item5,
Item6,
Item7,
....,Item11

我需要按照特定顺序对此数组进行排序,当然所有值都是'NSString'类型

如果我使用

sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)

它按如下方式排序: -

Item1,
Item10,
Item11,
Item2,
Item3,
Item4,
Item5,
Item6,
Item7,
Item8,
Item9

我可以手动从中提取数值,但我认为可能有更好的方法可以使用'NSComparator'。

5 个答案:

答案 0 :(得分:2)

像这样使用:

NSArray *arry = [[NSArray alloc] initWithObjects:@"Item1",@"Item2",@"Item3",@"Item4",@"Item5",@"Item11",@"Item10",@"Item6", nil];
NSArray *sortedStrings = [arry sortedArrayUsingSelector:@selector(localizedStandardCompare:)];
NSLog(@"sortedStrings---%@",sortedStrings);

答案 1 :(得分:1)

NSInteger sortFile(id a, id b, void* context) {
    return [a compare:b options:NSNumericSearch];
}

[yourArray sortedArrayUsingFunction:mySort context:nil];

答案 2 :(得分:1)

此代码适用于我:

NSArray *array = [NSArray arrayWithObjects:@"Item1",
                  @"Item10",
                  @"Item11",
                  @"Item2",
                  @"Item3", nil];

array = [array sortedArrayUsingComparator:^NSComparisonResult(NSString *str1, NSString *str2) {
    return [str1 compare:str2 options:(NSNumericSearch)];
} ];

NSLog(@"%@", array);

答案 3 :(得分:0)

试试这个:

 NSArray *sortedStrings = [yourArray sortedArrayUsingSelector:@selector(localizedStandardCompare:)];

了解更多sortedArrayUsingSelector

答案 4 :(得分:0)

如果使用sortedArrayUsingFunction:context:

执行此操作,则可以实现所需的任何功能