1

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

但是我想知道如果我想保留那些 N 最大数字的索引,我应该如何使用 lambda 表达式来编写它。

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

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

正如基里尔建议的那样:var result = numbers.OrderByDescending(n => n).Take(4);但是我怎样才能获得那些 N 最大数字的索引?它是一个 double[,] 2D 数组(不是列表)

4

1 回答 1

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();
于 2012-11-02T22:29:52.160 回答