按升序对整数的 NSArray 进行排序.我的代码有什么问题?



>import

int main(int argc, const char * argv[]) {
@autoreleasepool { 
NSArray *arr = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12", nil];        
arr = [arr sortedArrayUsingSelector:@selector(compare:options:)];
}
return 0;
}

输出为:1,10,11,12,2,3,4,5,6,7,8,9

有人可以帮忙如何按升序排序吗?

您正在对字符串数组进行排序,而不是对整数进行排序,因此这是正确的顺序。要使整数数组使用 @1、@2 等而不是 @"1"、"@"2">

实际上@1,@2创建NSNumber整数对象。NSArray 只能存储对象。

正如@TheBasicMind在他的回答中所说,你有一个字符串数组,而不是一个整数数组。您是按字符顺序而不是数字顺序对字符串进行排序。

Basic mind 使用 NSNumbers 数组的解决方案可能是更好的解决方案,因为它存储的是数值数组,而不是表示数值的字符串数组。

另一种解决方案是重写排序代码以使用字符串数值的字符串排序:

NSArray *array = @[@"12", @"7", @"10", @"3", @"4", @"5",
@"6", @"1", @"8", @"9", @"2", @"11"];
NSArray *sortedArray = [array sortedArrayUsingComparator: ^NSComparisonResult(
NSString *string1,
NSString *string2) {
return [string1 compare: string2 options: NSNumericSearch];
}];
NSLog(@"Sorted array = %@", sortedArray);

这将产生以下输出:

Sorted array = (
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12
)

最新更新