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

标签 c# linq

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

例如:

int[] IndexArray = ArrayWithValues.Return_Indexes_Of_1000_Biggest_Values

代码显然是伪造的,它只是为了说明我需要什么。

更新

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

我可以使用循环等轻松地完成它,但是代码很大,我想学习更多地使用 LINQ,但目前 LINQ 对我来说仍然很陌生。

我在这里遇到过类似的问题,但我无法修改代码以满足我的需要,因为人们通常只需要值而不是值的索引。

感谢您的帮助!

最佳答案

像这样的东西应该可以工作。它使用 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 个索引进行测试,得到 { 0, 8, 3, 9, 2 } ,映射到值 { 10, 9, 8, 7, 6 }


由于关于您的更新的评论已经解决,如果您确信数组的长度相等或者不会导致 IndexOutOfBoundsException

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

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

关于c# - 使用 LINQ 获取数组中前 1000 个最大条目的数组索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315318/

相关文章:

c# - 如何使用 LINQ 在 XML 中按名称获取多个元素

c# - 设计问题——业务层方法的原子性如何?

c# - 来自另一个大型 XML 文件的新 XML 文件,使用未知元素更改内部数据

javascript - 使用重定向来启动应用程序并仍保留在 ASP.NET 中的同一页面中

c# - IQueryable 对两个唯一 id 匹配的金额求和 C#

c# - 从列表对象转换为 C# 中的类

c# - 在 Entity Framework linq 中两次包含相同字段时的行为

c# - 什么时候显示表格?

c# - 我们可以从共享路径运行批处理文件 (.bat)

c# linq filter Dictionary<DateTime, int> 按预定义的最小时间差