>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
)