答えは、配列内のオブジェクトが数値であるか文字列であるかによって少し異なります。配列を並べ替えるさまざまな方法もあります(、、sortUsingDescriptors
... sortUsingComparator
)。
数値の配列がある場合は、たとえば次のように降順で並べ替えることができます。
NSMutableArray *a = [NSMutableArray arrayWithObjects:@1, @55, @9, @17, nil];
[a sortUsingComparator:^NSComparisonResult(NSNumber *obj1, NSNumber *obj2) {
return -[obj1 compare:obj2];
}];
// Result: 55, 17, 9, 1.
コンパレータブロックのマイナス記号は、増加から減少へと順序を逆にする効果があることに注意してください。
文字列の配列があり、同じように進めると、「10を超える数は奇妙な方法で順序付けを開始する」と呼ばれるものが得られます。
NSMutableArray *a = [NSMutableArray arrayWithObjects:@"1", @"55", @"9", @"17", nil];
[a sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
return -[obj1 compare:obj2];
}];
// Result: 9, 55, 17, 1.
オブジェクトは、数値ではなく文字列としてソートされます。
NSNumericSearch
解決策は、次のオプションを使用することです。
NSMutableArray *a = [NSMutableArray arrayWithObjects:@"1", @"55", @"9", @"17", nil];
[a sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
return -[obj1 compare:obj2 options:NSNumericSearch];
}];
// Result: 55, 17, 9, 1.