Вот как это сделать в одну (длинную) строку, используя LINQ, за один проход коллекции. Он должен работать для любых IEnumerable<int>
, а не только для списков.
int maxIndex = intList
.Select((x, i) => new { Value = x, Index = i })
.Aggregate
(
new { Value = int.MinValue, Index = -1 },
(a, x) => (a.Index < 0) || (x.Value > a.Value) ? x : a,
a => a.Index
);
Вот не-LINQ эквивалент выше, используя цикл foreach
. (Опять же, только один проход через коллекцию, и он должен работать для любого IEnumerable<int>
.)
int maxIndex = -1, maxValue = int.MinValue, i = 0;
foreach (int v in intList)
{
if ((maxIndex < 0) || (v > maxValue))
{
maxValue = v;
maxIndex = i;
}
i++;
}
Если вы знаете, что коллекция представляет собой IList<int>
, тогда простой цикл for
, вероятно, является самым простым решением:
int maxIndex = -1, maxValue = int.MinValue;
for (int i = 0; i < intList.Count; i++)
{
if ((maxIndex < 0) || (intList[i] > maxValue))
{
maxValue = intList[i];
maxIndex = i;
}
}