对保留原始索引而不是值的 NSArray 进行排序
Sorting an NSArray keeping original indexes rather than values
我有一组值,我想将它从最高值到最低值排序。这是我的数组:
@[@0.985517248005697843460382, @0.000103821940243745174581, @0.002930049254083499140483, @0.006089428685598983863325, @0.000169959081717878927225 @0.038708805305937427077012, @0.005785644142951103588435, @0.003949420720490224266663 @0.003306789895982742942537, @0.005520713777168946394258];
创建新数组最有效的方法是什么,而不是包含排序后的值,而是包含原始数组中的索引?
目前我正在做的是:
NSArray *array = @[@3, @5, @7, @2, @4, @4.1, @1, @10];
NSArray *sortedArray = [array sortedArrayUsingSelector: @selector(compare:)];
NSMutableArray *arraySortedByOriginalIndexes = [[NSMutableArray alloc] init];
for (int i = 0; i < sortedArray.count; i++) {
NSUInteger index = [array indexOfObject:sortedArray[i]];
[arraySortedByOriginalIndexes addObject:@(index)];
}
如果数组中没有数字相等,这是简单的解决方案。
NSArray *sortedArray = [array sortedArrayUsingSelector: @selector(compare:)];
NSMutableArray *mutableIndexes = [NSMutableArray array];
for (NSNumber *number in sortedArray) {
[mutableIndexes addObject:@([array indexOfObject:number])];
}
NSArray *indexes = [mutableIndexes copy];
同样,它仅在没有数字相等时才有效。
我有一组值,我想将它从最高值到最低值排序。这是我的数组:
@[@0.985517248005697843460382, @0.000103821940243745174581, @0.002930049254083499140483, @0.006089428685598983863325, @0.000169959081717878927225 @0.038708805305937427077012, @0.005785644142951103588435, @0.003949420720490224266663 @0.003306789895982742942537, @0.005520713777168946394258];
创建新数组最有效的方法是什么,而不是包含排序后的值,而是包含原始数组中的索引?
目前我正在做的是:
NSArray *array = @[@3, @5, @7, @2, @4, @4.1, @1, @10];
NSArray *sortedArray = [array sortedArrayUsingSelector: @selector(compare:)];
NSMutableArray *arraySortedByOriginalIndexes = [[NSMutableArray alloc] init];
for (int i = 0; i < sortedArray.count; i++) {
NSUInteger index = [array indexOfObject:sortedArray[i]];
[arraySortedByOriginalIndexes addObject:@(index)];
}
如果数组中没有数字相等,这是简单的解决方案。
NSArray *sortedArray = [array sortedArrayUsingSelector: @selector(compare:)];
NSMutableArray *mutableIndexes = [NSMutableArray array];
for (NSNumber *number in sortedArray) {
[mutableIndexes addObject:@([array indexOfObject:number])];
}
NSArray *indexes = [mutableIndexes copy];
同样,它仅在没有数字相等时才有效。