Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找列表中最大元素的所有索引_C# - Fatal编程技术网

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
在循环中连接字符串,这是不好的,因为字符串是不可变的,因此最终会以这种方式创建一组中间字符串。