2012-07-10 79 views
1

这里的问题,我有: - 我有一个数组排序的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'。

+0

可能重复【如何做一个NSArray一个自然排序?](http://stackoverflow.com/questions/2846301/how-to-do-a-自然排序上的-的NSArray) – Aravindhan 2012-07-10 06:39:19

回答

2

使用它这样做的任何功能:

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

试试这个:

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

更多sortedArrayUsingSelector

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

[yourArray sortedArrayUsingFunction:mySort context:nil]; 
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);