【C#】リストから指定した値に一番近い値を持つインデックスを取得する
例えば以下のようなことがやりたく、普段for文を回してサーチしていました。
var list = new List<double>() { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 }; double value = 3.1; int index = FindClosestIndex(list, value); // 3.1に一番近い値は3.0。3.0のインデックスは2なので2と表示される Console.WriteLine(index);
このやり方はStackOverflowにあって、下記で出来ました。Aggregateは分かりづらいので放っておいたのですが、こんな使い方も出来るのですね。
int FindClosestIndex(List<double> list, double value) { double closest = list.Aggregate((x, y) => Math.Abs(x - value) < Math.Abs(y - value) ? x : y); return list.IndexOf(closest); }