使用LINQ获取数组中前1000个最大条目的数组索引值

本文关键字:数组 索引值 1000个 LINQ 获取 使用 | 更新日期: 2023-09-27 18:24:47

我想要一个干净的LINQ代码,它可以获得数组中前1000个最大值的索引值的数组。

例如:

int[] IndexArray = ArrayWithValues.Return_Indexes_Of_1000_Biggest_Values

这个代码显然是假的——只是为了说明我需要什么。

更新

我完全忘了说我需要第二个功能。我有第二个数组,我需要检索第二个阵列中的所有值,该数组的索引与IndexArray中包含的索引相同。

我可以很容易地使用循环和所有这些,但代码很大,我想更多地学习使用LINQ,但目前LINQ对我来说仍然很陌生。

我已经经历了这里提出的类似问题,但我无法修改代码以满足我的需求,因为人们通常只需要值,而不需要值的索引。

谢谢你的帮助!

使用LINQ获取数组中前1000个最大条目的数组索引值

这样的东西应该可以工作。它使用Select的重载,使您能够合并第二个输入,该输入是序列中项目的索引。

var indexArray = sourceArray
                   .Select((value, index) => new { value, index })
                   .OrderByDescending(item => item.value)
                   .Take(1000)
                   .Select(item => item.index)
                   .ToArray();

只需将值和索引投影到一个对象中,按值排序,取前1000项,然后在转换为数组之前简单地选择索引。

通过从数组{ 10, 4, 6, 8, 2, 3, 5, 1, 9, 7 }中获取前5个索引进行测试,得到映射到值{ 10, 9, 8, 7, 6 }{ 0, 8, 3, 9, 2 }


由于注释已经针对您的更新进行了说明,如果您确信数组的长度相等或不会导致IndexOutOfBoundsException,则可以简单地从其他索引中选择这些索引。

.Select(item => otherArray[item.index])
.ToArray();

您可以查找的另一种方法是Enumerable.Zip