我看到了文章: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);
如果我使用本文中的方法,如何找到其他索引?
答案 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()
。