对许多包含数字的NSArray进行排序

Rib*_*ark 14 iphone cocoa-touch objective-c nsarray ios

我有一个NSArray,其中填充了NSMutableArray中的对象.这些对象中的大多数具有整数值,如"1","2","3","4","5",有时会有"home","far left"或"far right"这样的名称.我正在尝试使用sortedArrayUsingSelector在Objective C中对此数组进行排序:@selector(compare :)在数组中少于10个项目时工作正常.但是当它还有更多我开始得到"1","10","11","12","2","3"类型的东西.非常感激任何的帮助.代码不应返回任何内容.它只需要排序并继续前进.

原始代码:

presetNamesSort = [[[NSMutableArray alloc]init]retain];

presetNamesSort = [presetNames sortedArrayUsingSelector:@selector(compare:)];
Run Code Online (Sandbox Code Playgroud)

Ita*_*ber 42

您可以使用NSArray-sortedArrayUsingComparator:方法来获得使用自定义模块排序后的数组.我发现这比比较方便-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];
}];
Run Code Online (Sandbox Code Playgroud)

这将返回一个如下所示的数组:

(
    1,
    2,
    4,
    5,
    10,
    Hello,
    Hi
)
Run Code Online (Sandbox Code Playgroud)

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