c#如何查找存在重复值的其他索引(查找数组的最高值和索引)
本文关键字:索引 查找 其他 数组 最高值 何查找 存在 | 更新日期: 2023-09-27 17:50:10
我看到了文章:c#找到最高数组值和索引
我有另一个问题是:如何找到其他索引,如果存在重复的值?
假设数组为
int[] anArray = { 1, 5, 2, 7 , 7 , 3};
int maxValue = anArray.Max();
int maxIndex = anArray.ToList().IndexOf(maxValue);
如果我使用本文中的方法,如何找到其他索引?
你的问题是"我如何找到其他索引",但它应该是"我如何找到所有其他索引",因为可能有多个。
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()
或类似的方式结束查询。
这就回答了你的问题。使用LastIndexOf()将找到您指定值的最后一个索引;)
这样你将得到这个值的最后一个索引和最后一个索引:
int maxValue = anArray.Max()
int index = anArray.ToList().LastIndexOf(maxValue);
参考使用Linq从列表中获取所有匹配值的索引的接受答案
所有的LINQ方法都被精心设计为只迭代一次源序列(当它们迭代一次时)。因此,我们使用Enumerable.Range
表达式从LINQ到循环
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()