ジャスト(Math.abs
を使用して)違いの絶対値を維持し、それが発生したインデックスと一緒に、あなたがこれまで見てきた最小値を追跡します。例えば
:
long currentTime = b.getTime(); // Only call once, to be consistent
long minAbsDiff = Long.MAX_VALUE;
int minIndex = -1;
for(int i=0; i < a.length; i++) {
diff[i] = a[i].getTime() - currentTime;
long abs = Math.abs(diff[i]);
if (abs < minAbsDiff) {
minAbsDiff = abs;
minIndex = i;
}
}
これは、あなたはまだ他の場所diff[i]
が必要と仮定しています。そうしないとあなただけの差が最小とa
値が必要な場合、及び、あなたはよりコンパクトにそれを書くことができます。
long currentTime = b.getTime(); // Only call once, to be consistent
long minAbsDiff = Long.MAX_VALUE;
WhateverType minContainer = null;
for (WhateverType x : a) {
long abs = Math.abs(x.getTime() - currentTime);
if (abs < minAbsDiff) {
minAbsDiff = abs;
minContainer = x;
}
}
Sigh。あなたの答えは美しいです(+1)。しかし、少なくとも私はタイプミスを発見しました。 :-)それは 'Long.MAX_VALUE'です –
@ S.P.Floyd - seanizer:Doh!修正しました。 C#で私の心の半分を持っていた;) –
そして今あなたはタイプミスの半分を修正しました:-) –