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);

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

c#如何查找存在重复值的其他索引(查找数组的最高值和索引)

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

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()