我有五个国家的多维阵列和一些奖牌。最后一栏是总数,我需要归还最多奖牌的国家。只要没有两个国家拥有相同数量的奖牌,而最大数量的奖牌不存在,我的代码就是“有效的”。 可能我只是对数组没有足够的经验,但是如果需要的话,如何返回多个contry?
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];
}
}
答案 0 :(得分:1)
您可以使用列表来存储获奖者。
JSON.parse(a.to_json)
但是我想重申一下评论中所说的话,如果可以使用Object List而不是多维数组,那就更好了。这样可以提高代码的可读性,并使事情简单得多。
答案 1 :(得分:0)
字典将是一个容易得多的起点。然后,您可以根据dict中的值进行排序,并使用简单的循环检查重复值。
答案 2 :(得分:0)
在很多事情上,我会做的与您不同,但这并不重要(请参阅结尾处的注释)。您的问题是如何处理多个国家拥有相等数量和最大数量奖牌的情况。
如何返回多个国家?
好吧,这很简单:假设您通过以下函数返回了获胜者:
string[] GetWinner() {
// your code
return new[] { "20", "USA" };
}
然后数据类型没有变化,只需将另一个国家/地区添加到数组中,调用代码应检查您有多少个
string[] GetWinner() {
// your code
return new[] { "20", "USA", "CAN" };
}
现在,如果在创建数组时如何创建大小未知的数组存在问题,那么通常的解决方案是使用List<>
,在这种情况下,它将用作可调整大小的数组,你。
最终代码如下所示
static string[] GetWinner(string[,] medals) {
int rows = medals.GetLength(0);
var winners = new List<string>();
int maxMedals = 0;
for (var i = 0; i < rows; i++) {
var n = int.Parse(medals[i, 4]);
maxMedals = n > maxMedals ? n : maxMedals;
}
for (var i = 0; i < rows; i++) {
var n = int.Parse(medals[i, 4]);
if (n == maxMedals)
winners.Add(medals[i, 0]);
}
winners.Insert(0, maxMedals.ToString());
return winners.ToArray();
}
现在,我建议您使用更好的数据结构来存储您的奖牌。但是由于我不了解全部情况,所以我想,类似下面的内容是合理的。如果与这些对象相关的代码限于代码文件的一小部分,则可以使用ValueTuple-简化代码,而不使用命名类型。这应该避免分配与2D数组关联的大块内存,并且还应避免将int存储在字符串中。
public class CountryMedalTally {
public string Country { get; set; }
public string[] Medals { get; set; }
public int MedalCount { get; set; }
}
public class Winner {
public List<string> Country { get; set; }
public int MedalCount { get; set; }
}
List<CountryMedalTally> AllMedals;