你將如何理清一個數組,其中還包含0值,即比較值目標C - 陣列中的一個arbritary
- -54
- -12
- -10
並將其與一個常數(比如說-5),這將返回指數的相應最近值(最小差異)? (即,最接近的值= -10,所以返回值= 4)
這裏的挑戰爲0值應始終被忽視,並且陣列不能手
下面有之前進行排序類似的問題,回答爲這並不完全在我的情況 How do I find the closest array element to an arbitrary (non-member) number?
你將如何理清一個數組,其中還包含0值,即比較值目標C - 陣列中的一個arbritary
並將其與一個常數(比如說-5),這將返回指數的相應最近值(最小差異)? (即,最接近的值= -10,所以返回值= 4)
這裏的挑戰爲0值應始終被忽視,並且陣列不能手
下面有之前進行排序類似的問題,回答爲這並不完全在我的情況 How do I find the closest array element to an arbitrary (non-member) number?
工作也相對簡單:
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
對不起,abs(a-target)的意義是什麼? 。 。 。在這種情況下,整個循環始終是5? 。 。 。 。它也不是假設爲'if(b!= 0 && ...)'? –
@TaskinulHaque if(b && ...)和if(b!= 0 && ...)abs一樣好,可以從任一側找到最接近的一個。 – dasblinkenlight
再次感謝@dasblinkenlight! :) –
這是一個常規的C數組,或'NSArray'? – dasblinkenlight
atm,它是一個NSArray! –
對排序的限制需要一些解釋...你是否試圖讓這個數組與另一個數組同步?將數組索引用作隱式數據值通常會導致痛苦 - 也許現在是重新考慮數據結構的時候了。 – Caleb