您将如何对一个数组进行排序,该数组也包含 0 个值,即
- -54
- 0
- -12
- 0
- -10
并将其与一个常数(比如-5)进行比较,这将返回相应最接近值的索引(最小差异)?(即最接近的值 = -10,所以返回值 = 4)
这里的挑战是 0 值应该总是被忽略,并且数组不能事先排序
这是一个类似的问题,在我的情况下它的答案不太适用 如何找到最接近任意(非成员)数字的数组元素?
您将如何对一个数组进行排序,该数组也包含 0 个值,即
并将其与一个常数(比如-5)进行比较,这将返回相应最接近值的索引(最小差异)?(即最接近的值 = -10,所以返回值 = 4)
这里的挑战是 0 值应该总是被忽略,并且数组不能事先排序
这是一个类似的问题,在我的情况下它的答案不太适用 如何找到最接近任意(非成员)数字的数组元素?
这相对简单:
NSArray *data = @[@-54, @0, @-12, @0, @-10];
NSUInteger best = 0;
int target = -5;
for (NSUInteger i = 1 ; i < data.count ; i++) {
int a = [[data objectAtIndex:best] intValue];
int b = [[data objectAtIndex:i] intValue];
if (b && abs(a-target) > abs(b-target)) { // Ignore zeros, check diff
best = i;
}
}
// At this point, "best" contains the index of the best match
NSLog(@"%lu",best); // Prints 4