Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ获取数组中前1000个最大项的数组索引值_C#_Linq - Fatal编程技术网

C# 使用LINQ获取数组中前1000个最大项的数组索引值

C# 使用LINQ获取数组中前1000个最大项的数组索引值,c#,linq,C#,Linq,我希望有一个干净的LINQ代码,可以获得数组中前1000个最大值的索引值数组 例如: int[] IndexArray = ArrayWithValues.Return_Indexes_Of_1000_Biggest_Values 代码显然是假的,它只是为了说明我需要什么 更新 我完全忘了说我需要第二个功能。我有第二个数组,需要检索第二个数组中的所有值,该数组的索引与IndexArray中包含的索引相同 我可以很容易地使用循环等等,但是代码太大了,我想更多地学习使用LINQ,但目前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}


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

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

另一种方法是
可枚举。Zip

谢谢你,这很有效,但我完全忘了以后我还需要别的东西,请阅读update@user1035217:只需将last
Select
更改为
Select(item=>otherArray[item.index])
。Mmm认为这会很简单。林克真是太棒了。谢谢对于更新:
var itemsFromSecondArray=indexArray.Select(i=>secondArray[i]).ToArray()
,或者如果您实际上不需要
indexArray
,您可以从
indexArray
表达式中选择它们。