首页 > 解决方案 > 我需要用 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];
            }
        }

标签: c#multidimensional-array

解决方案


您可以使用列表来存储获胜者。

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]));
    }
}

但我想重申评论中所说的话,如果你可以使用对象列表而不是多维数组会更好。它会增加代码的可读性并使事情变得更简单。


推荐阅读