使用lambda表达式从2D数组double [,]得到N max个数及其对应的位置(索引)

时间:2012-11-02 22:15:48

标签: .net linq c#-4.0 lambda

这是一个类似于[Get N max numbers from a List<int> using lambda expression]

的问题

但是我想学习是否要保留那些N max数的索引,我应该如何使用lambda表达式来编写它。

示例)List<int> numbers = new List<int> { 12, 5, -8, 4, 7, 28, 3, 22 };

我们如何通过lambda获得4个最大数字:{28, 22, 12, 7}加上索引{ 5, 7, 0, 4}

kirill建议:var result = numbers.OrderByDescending(n => n).Take(4);但是如何获得N个最大数字的索引?它是一个双[,] 2D数组(不是列表)

1 个答案:

答案 0 :(得分:3)

请注意:OrderBy + Take是一个O(N * Log(N))操作,其中“Top N”可以更快地完成。 https://codereview.stackexchange.com/questions/9773/optimizing-liststring-performance-in-c/9777#9777

说;

List<int> numbers = new List<int>() { 12, 5, -8, 4, 7, 28, 3, 22 };
var list = numbers.Select((n, i) => new { Num=n, Inx=i })
                    .OrderByDescending(x => x.Num)
                    .Take(4)
                    .ToList();