C# 查找列表中最大元素的所有索引
我有以下资料:C# 查找列表中最大元素的所有索引,c#,C#,我有以下资料: 列表结果=新列表(); ... 结果:添加(…); ... WriteLine($“最大增益:{gains.Max():f6}({results.IndexOf(gains.Max())+1})”; Console.WriteLine($“最大损失:{Math.Abs(loss.Min()):f6}({results.IndexOf(loss.Min())+1})”; IndexOf只查找第一个索引。如果有多个索引,我想显示所有索引 具有多个最大索引的示例: Maximum g
列表结果=新列表();
...
结果:添加(…);
...
WriteLine($“最大增益:{gains.Max():f6}({results.IndexOf(gains.Max())+1})”;
Console.WriteLine($“最大损失:{Math.Abs(loss.Min()):f6}({results.IndexOf(loss.Min())+1})”;
IndexOf只查找第一个索引。如果有多个索引,我想显示所有索引
具有多个最大索引的示例:
Maximum gain: 0.000700 (#15, #44)
带有一个索引的示例:
Maximum gain: 0.000700 (#13)
首先,我将最大值提取到一个变量中,该变量可用于获取索引的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})");
用
.Aggregate
代替Join(),有没有可能?@nop,它是“string.Join
”我真的不明白你为什么不想要它(当我看到它的时候,我正要发布一个与这个答案相当的答案),你可以用StringBuilder
,但它会很混乱,因为你必须跟踪何时添加逗号string.Join
是专门为此设计的。我想要.Aggregate
,因为我的前三个查询看起来像:Console.WriteLine($“前三名:{results.Where(e=>e>e>0).OrderByDescending(e=>e.Take(3).ToList().ConvertAll(e=>e.ToString(“f6”)).Aggregate((当前,下一个)=>$“{当前},{next}”)代码>。它与string.Join
的等价物是什么?请注意,不这样做的另一个原因是Aggregate
在循环中连接字符串,这是不好的,因为字符串是不可变的,因此最终会以这种方式创建一组中间字符串。