对许多包含数字的NSArray进行sorting

我有一个NSArray的填充NSMuttableArray对象。 这些对象中的大多数具有“1”,“2”,“3”,“4”,“5”等整数值,有时会有“家”,“最左”或“最右”的名称。 我正在尝试使用sortedArrayUsingSelector对Objective C中的数组进行sorting:@selector(compare :)在数组less于10的情况下工作正常。 但是当它有更多我开始得到“1”,“10”,“11”,“12”,“2”,“3”types的东西。 非常感激任何的帮助。 该代码不应该返回任何东西。 只需要分类并继续前进。

原始代码:

presetNamesSort = [[[NSMutableArray alloc]init]retain]; presetNamesSort = [presetNames sortedArrayUsingSelector:@selector(compare:)]; 

您可以使用NSArray-sortedArrayUsingComparator:方法来使用自定义块获取sorting后的数组。 我发现这比-sortedArrayUsingSelector:方便,因为你可以声明比较内联,如下所示:

 NSArray *unsortedArray = [NSArray arrayWithObjects:@"Hello", @"4", @"Hi", @"5", @"2", @"10", @"1", nil]; NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^(NSString *str1, NSString *str2) { return [str1 compare:str2 options:NSNumericSearch]; }]; 

这将返回一个看起来像这样的数组:

 ( 1, 2, 4, 5, 10, Hello, Hi ) 

一般来说,使用块非常好,因为它们不需要创build在代码中运行amuk的随机select器。

尝试使用NSNumericSearch使用-[NSString compare:options:] 。 要将其与-sortedArrayUsingSelector:一起使用,必须在NSString上将比较调用包装为一个单独的类别方法:

 - (NSComparisonResult)numericCompare:(NSString *)aString { return [self compare:aString options:NSNumericSearch]; } 

用于sorting降序

 NSArray *sortedArray = [arrayToSort sortedArrayUsingComparator:^(NSString *str1, NSString *str2) { return [str1 compare:str2 options:NSNumericSearch]; }]; sortedArray = [[sortedArray reverseObjectEnumerator] allObjects];` 

而为了消除

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