Есть много вещей, которые я бы сделал по-другому, чем вы, но это помимо сути (см. Примечание в конце).Ваша проблема в том, как справиться с ситуацией, когда у вас есть несколько стран с равным и максимальным количеством медалей.
Как вернуть несколько стран?
Ну, это легко: представьте, что вы возвращаете победителя из приведенной ниже функции:
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;