首页 > 解决方案 > 查找列表中最大元素的所有索引

问题描述

我有以下内容:

List<decimal> results = new List<decimal>();

...

result.Add(...);

...

Console.WriteLine($"Maximum gain: {gains.Max():f6} (#{results.IndexOf(gains.Max()) + 1})");
Console.WriteLine($"Maximum loss: {Math.Abs(losses.Min()):f6} (#{results.IndexOf(losses.Min()) + 1})");

IndexOf 仅查找第一个索引。如果有多个索引,我想显示所有索引。

具有多个最大索引的示例:

Maximum gain: 0.000700 (#15, #44)

具有一个索引的示例:

Maximum gain: 0.000700 (#13)

标签: c#

解决方案


首先,我将最大值提取到一个变量中,该变量可用于获取索引的 Linq 查询。然后使用它创建一个格式化的字符串列表,以在您输出到控制台的字符串中使用。

var maxGain = gains.Max();
var maxIndexes = string.Join(
    ", ", 
    results.Select((r,i) => new { Result = r, Index = i })
        .Where(x => x.Result == maxGain)
        .Select(x => $"#{x.Index +1}"));

Console.WriteLine($"Maximum gain: {maxGain:f6} ({maxIndexes})");

推荐阅读