我有一个NSMutableArray,里面保存了用户的高分。我想按数字顺序排列项目(数字存储在NSStrings中)
例如:
4,2,7,8
变成
2,4,7,8
如果数据存储在NSStrings中,最简单的方法是什么?
我有一个NSMutableArray,里面保存了用户的高分。我想按数字顺序排列项目(数字存储在NSStrings中)
例如:
4,2,7,8
变成
2,4,7,8
如果数据存储在NSStrings中,最简单的方法是什么?
这段代码可以实现:
//creating mutable array
NSMutableArray *myArray = [NSMutableArray arrayWithObjects:@"4", @"2", @"7", @"8", nil];
//sorting
[myArray sortUsingComparator:^NSComparisonResult(NSString *str1, NSString *str2) {
return [str1 compare:str2 options:(NSNumericSearch)];
}];
//logging
NSLog(@"%@", myArray);
它使用块,确保您的目标操作系统支持它(对于iOS是4.0,对于OSX是10.6)。
不兼容的块指针类型正在初始化'int(^)(struct NSString*, struct NSString*)',预期为'NSComparator'
。 - Allisonnumber
的数字值的nsdictionaries
。isKeyAscending = isKeyAscending ? NO : YES;
[yourArray sortUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) {
NSString *str1 = [obj1 objectForKey:@"number"];
NSString *str2 = [obj2 objectForKey:@"number"];
if(isKeyAscending) { //ascending order
return [str1 compare:str2 options:(NSNumericSearch)];
} else { //descending order
return [str2 compare:str1 options:(NSNumericSearch)];
}
}];
//yourArray is now sorted
yourArray = [yourArray sortUsingComparator......}];
。我们必须将结果分配给数组,然后才能打印所需的输出。 - NSPratikNSMutableArray *unsortedHighScores = [[NSMutableArray alloc] initWithObjects:@"4", @"2", @"7", @"8", nil];
NSMutableArray *intermediaryArray = [[NSMutableArray alloc] init];
for(NSString *score in unsortedHighScores){
NSNumber *scoreInt = [NSNumber numberWithInteger:[score integerValue]];
[intermediaryArray addObject:scoreInt];
}
NSArray *sortedHighScores = [intermediaryArray sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@", sortedHighScores);
输出结果如下:
2
4
7
8
如果您对代码有任何疑问,请在评论中提出。希望这能帮到您!
NSMutableArray方法sortUsingSelector:应该可以实现:
[scoreArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]
应该这样做。
这个答案来自Darshit Shah,使它顺畅运行
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc]initWithKey:@"rank" ascending:YES selector:@selector(localizedStandardCompare:)];