c# - 我需要用 C# 在数组中找到最大值
问题描述
我有一个包含五个国家和一些奖牌的多维数组。最后一栏是总数,我需要返回奖牌最多的国家。只要没有两个国家的奖牌数量相同且数量最多,我的代码就是“有效的”。可能我只是没有足够的数组经验,但是如果需要,我如何返回多个国家?
string [,] medals = new string[5, 5];
Random rdn = new Random();
medals[0, 0] = "Brazil";
medals[1, 0] = "USA";
medals[2, 0] = "Russia";
medals[3, 0] = "France";
medals[4, 0] = "Egypt";
for (int i = 0; i < medals.GetLength(0); i++)
for (int j = 1; j < medals.GetLength(1); j++)
{
//This fills the gold, silver and copper medals
if (j < medals.GetLength(1)-1)
medals[i, j] = rdn.Next(1, 6).ToString();
else
//This fills the total medals
medals[i, j] = (int.Parse(medals[i, 1]) + int.Parse(medals[i,2]) + int.Parse(medals[i,3])).ToString();
}
//The first index stores the max number so far and the second stores the name of the country
string [] winner = { "0", "0" };
for (int i = 0; i < medals.GetLength(0); i++)
{
if (int.Parse(medals[i,4]) > int.Parse(winner[0]))
{
winner[0] = medals[i, 4];
winner[1] = medals[i, 0];
}
}
解决方案
您可以使用列表来存储获胜者。
var listWinners = new List<KeyValuePair<string,string>>();
for (int i = 0; i < medals.GetLength(0); i++)
{
if ((listWinners.Count() == 0)||(int.Parse(medals[i,4]) > int.Parse(listWinners.First().Value)))
{
listWinners.Clear();
listWinners.Add(new KeyValuePair<string,string>(medals[i,0],medals[i,4]));
}
else if (int.Parse(medals[i,4]) == int.Parse(listWinners.First().Value))
{
listWinners.Add(new KeyValuePair<string,string>(medals[i,0],medals[i,4]));
}
}
但我想重申评论中所说的话,如果你可以使用对象列表而不是多维数组会更好。它会增加代码的可读性并使事情变得更简单。
推荐阅读
- c# - 如何在.net core 3中强制Func作为强类型依赖注入?
- bash - 编写脚本,以便保存命令输出并将其另存为带有日期戳的不同文本
- mysql - NetBeans、GlassFish JPA 和 MySQL
- c++ - 如何在类方法中实现一段代码?
- v8 - 将数据流式传输到 V8 / V8 外
- python - TypeError: 'str' 对象不可调用 | Jupyter 笔记本 |
- windows - 杰基尔 3.8.4 | 错误:文件存在@dir_s_mkdir - /jekyll/app/_site/tag/mytags
- python - 如何在 PyCharm 中导入海龟?不断收到错误
- docker - Docker Swarm:如何删除停止的容器
- azure - 如何从 URL 中提取特定的子目录名称