如何获取最接近数字的列表索引?

时间:2011-05-10 22:00:28

标签: c# .net linq

如何获取列表索引,您可以在哪里找到最接近的数字?

List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;

int closest = list.Aggregate((x,y) => 
Math.Abs(x-number) < Math.Abs(y-number) ? x : y);

5 个答案:

答案 0 :(得分:6)

如果你想要最接近数字的索引,那就可以了:

int index = list.IndexOf(closest);

答案 1 :(得分:4)

您可以在匿名类中包含每个项的索引,并将其传递给聚合函数,并在查询结束时可用:

var closest = list
    .Select( (x, index) => new {Item = x, Index = index}) // Save the item index and item in an anonymous class
    .Aggregate((x,y) => Math.Abs(x.Item-number) < Math.Abs(y.Item-number) ? x : y);

var index = closest.Index;

答案 2 :(得分:0)

对您已有的内容进行非常小的更改,因为您似乎已经得到了答案:

        List<int> list = new List<int> { 2, 5, 7, 10 }; int number = 9;

        int closest = list.Aggregate((x, y) => Math.Abs(x - number) < Math.Abs(y - number) ? x : y);

答案 3 :(得分:0)

最接近的数字是差异最小的数字:

int closest = list.OrderBy(n => Math.Abs(number - n)).First();

答案 4 :(得分:0)

只需枚举索引并选择具有最小增量的索引,就像进行常规循环一样。

const int value = 9;
var list = new List<int> { 2, 5, 7, 10 };
var minIndex = Enumerable.Range(1, list.Count - 1)
    .Aggregate(0, (seed, index) =>
        Math.Abs(list[index] - value) < Math.Abs(list[seed] - value)
            ? index
            : seed);