C#如果存在重复值,如何查找其他索引(找到最高数组值和索引)?

时间:2014-03-14 09:16:54

标签: c# arrays

我看到了文章:C# find highest array value and index

我还有一个问题是:如果存在重复值,如何找到其他索引?

假设数组是

int[] anArray = { 1, 5, 2, 7 , 7 , 3};

int maxValue = anArray.Max();
int maxIndex = anArray.ToList().IndexOf(maxValue);

如果我使用本文中的方法,如何找到其他索引?

3 个答案:

答案 0 :(得分:4)

您的问题是"如何找到其他索引"但它应该是"我如何找到所有其他索引"因为可能有多个。

int[] anArray = { 1, 5, 2, 7, 7, 3 };

int maxValue = anArray.Max();
int maxIndexes =
 anArray
 .Select((x, i) => new { x, i }) //add indexes to sequence
 .Where(x => x == maxValue) //filter on maxValue
 .Select(x => x.i) //only select index
 .ToList(); //ToList is optional

如果您只想要最后一个,或者您确定最多只有一个这样的索引,只需使用.Last()或类似结束查询。

答案 1 :(得分:0)

这回答了你的问题。使用LastIndexOf()将找到您指定的值的最后一个索引;)

这样您将获得该值的最后一个索引和最后一个索引:

int maxValue = anArray.Max()
int index = anArray.ToList().LastIndexOf(maxValue);

答案 2 :(得分:0)

请参阅Get indexes of all matching values from list using Linq

的已接受答案

所有LINQ方法都经过精心设计,只能迭代源序列一次(当它们被迭代一次时)。因此,我们使用LINQ中的Enumerable.Range表达式循环

int[] anArray = { 1, 5, 2, 7 , 7 , 3};
int maxValue = anArray.Max();

var result = Enumerable.Range(0, anArray.Count())
 .Where(i => anArray[i] == maxValue)
 .ToList();

额外信息:Enumerable.Range会自动排除最高索引anArray.Count()