旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【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);
}


stackoverflow.com