C# 在c语言中从列表中获取最大值
因此,我在使用一个C程序时遇到了一些问题,该程序旨在对列表中的8高值求和 该程序通过声明一个变量currenthigh来工作,该变量存储等级列表中的一个值。然后将其自身与值ABSHOW进行比较,查看其是否大于确定的最高值。如果是,则将currenthigh设置为新的最高值 循环遍历列表并确认最大值后,将其添加到uppertotal变量中,并使用喷射器变量将其从列表中删除。然后程序迭代,这次没有先前的最高值。它迭代8次,以便最终将前8个值添加到uppertotal 问题是,尽管代码中有删除它的指令,但列表中仍然保留了最高的变量,所以它只将最高值添加到自身8次C# 在c语言中从列表中获取最大值,c#,list,loops,C#,List,Loops,因此,我在使用一个C程序时遇到了一些问题,该程序旨在对列表中的8高值求和 该程序通过声明一个变量currenthigh来工作,该变量存储等级列表中的一个值。然后将其自身与值ABSHOW进行比较,查看其是否大于确定的最高值。如果是,则将currenthigh设置为新的最高值 循环遍历列表并确认最大值后,将其添加到uppertotal变量中,并使用喷射器变量将其从列表中删除。然后程序迭代,这次没有先前的最高值。它迭代8次,以便最终将前8个值添加到uppertotal 问题是,尽管代码中有删除它的指令
int currenthigh = 0;
int abshigh = 0;
int ejector = 0;
int uppertotal = 0;
for (int g = 0; g < 8; g++)
{
for (int z = 0; z < gradelist.Count; z++)
{
Console.WriteLine("PASS STARTED");
currenthigh = Convert.ToInt32((gradelist[z]));
Console.WriteLine("currenthigh" + currenthigh);
if (currenthigh > abshigh)
{
abshigh = currenthigh;
ejector = z;
}
}
Console.WriteLine("ejector" + ejector);
uppertotal = uppertotal + currenthigh;
gradelist.RemoveAt(ejector);
Console.WriteLine("PASS COMPLETE");
Console.WriteLine("RESETING");
}
注意-gradelist是一个整数列表,始终至少包含12项。对于相对简单的任务,您的代码非常大。 您可以选择列表的顶部X,如下所示:
top_list = gradelist.OrderByDescending(i => i).Take(X)
使用列表/集合系统时。Linq是您的朋友发生这种情况是因为您没有从成绩列表中删除最高值。注意,你们把Z放在了弹出器中,但Z是成绩表中的一个索引,当你们试图删除它时,你们什么也不删除,因为成绩表中并没有Z作为成员!而不是
gradelist.RemoveAt(ejector);
您应该这样做:
gradelist.RemoveAt(gradelist[ejector]);
但我建议你采取完全不同的方法。如果您只想得到您的uppertotal,即gradlist中前8名成员的总和,请使用以下简单技巧:
uppertotal += gradelist.OrderByDescending(p => p).Take(8).Sum();
这两个都是真的,我目前不支持一台装有VS的电脑,所以无法运行它:。感谢fb,代码现在应该可以运行了谢谢你!我不知道这个方法!