2012-07-10 101 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);