int highestValue = someList.IndexOf(someList.Max())
someList包含大量重复项,someList.Max()返回最高值的第一个实例的索引。
我是否可以使用一些技巧(颠倒列表的顺序?)来获取列表中最高值的最终出现的索引,而不是求助于编写手动方法?
答案 0 :(得分:4)
试试这个:
int highestValue = someList.LastIndexOf(someList.Max()) ;
答案 1 :(得分:3)
你的意思是得到index of the last occurrence?那将是:
int highestValueIndex = someList.LastIndexOf(someList.Max())
但是,您应该知道,您在原始代码和上面的代码中对两个的数据进行了传递。如果你想一次性完成(如果你的数据集很大,你应该只担心这个),你可以这样做:
static int LastIndexOfMax(List<int> list)
{
// Empty list, no index.
if (list.Count == 0) return -1;
// Default to first element then check all others.
int maxIdx = 0, maxVal = list[0];
for (int idx = 1; idx < list.Count; ++idx) {
// Higher or equal-and-to-the-right, replace.
if (list[idx] >= maxVal) {
maxIdx = idx;
maxVal = list[idx];
}
}
return maxIdx;
}
答案 2 :(得分:3)
所有其他答案完全正确,必须注意这需要在列表上进行2次迭代(一次查找最大元素,第二次查找最后一个索引)。对于一个非问题的整数列表,但如果迭代更复杂,可以选择以下方法:
var highestValue = someList.Select((val, ind) => new { Value = val, Index = ind })
.Aggregate((x, y) => (x.Value > y.Value) ? x : y)
.Index;
答案 3 :(得分:1)
使用LastIndexOf
int highestValue = someList.LastIndexOf(someList.Max());