У меня есть два массива по 12 элементов в каждом. Один представляет собой строковый массив с 4 разными цветами, а остальные являются дублирующими цветами. Второй массив представляет собой массив с плавающей точкой с 12 различными значениями.
string[] fishColor = new string[] {"blue", "red", "green", "pink", "blue", "pink", "blue", "red", "green", "blue", "red", "green"};
float[] fishLength = new float[12] { 8.2f, 17.1f, 23.2f, 2.3f, 5.5f, 7.83f, 9.6f, 10.7f, 12.3f, 4.2f, 8.71f, 9.17f };
Цель состоит в том, чтобы создать метод, который найдет наибольшее значение с плавающей точкой для данного цвета. Например, всего имеется 4 строки со значением «blue», и каждая из них имеет соответствующее значение с плавающей запятой:
fishColor [0] = «Blue» будет в паре с fishLength [0] = 8.2
fishColor [4] = "Синий" будет в паре с fishLength [4] = 5.5
et c ...
Метод должен быть в состоянии найти самый большой среди дубликатов.
Для контекста у меня есть меню, в котором перечислены четыре разных цвета в массиве строк. Единственный пользовательский ввод в этой программе - это опция меню, которую выбирает пользователь, поэтому один из цветов.
bool fin = false;
Console.WriteLine("\r\nWelcome to BigBlueFish!\r\n\r\nPlease select a fish color below...");
do
{
Console.WriteLine("\r\n[1] Blue");
Console.WriteLine("\r\n[2] Red");
Console.WriteLine("\r\n[3] Green");
Console.WriteLine("\r\n[4] Pink");
Console.WriteLine("\r\n[0] Exit to main menu");
string strSelect = Console.ReadLine();
int numSelect;
try
{
numSelect = int.Parse(strSelect);
}
catch (FormatException)
{
Console.WriteLine("\r\nPlease select a menu option!");
continue;
}
Console.WriteLine("\r\nYou have selected {0}", numSelect);
switch (numSelect)
{
case 0:
Console.WriteLine("\r\nTill next time!");
fin = true;
break;
case 1:
var mdata1 = FindBiggestFish(fishColor, fishLength);
Console.WriteLine("\r\nWell now seems like you found the biggest blue fish is {0}in", mdata1);
break;
case 2:
var mdata2 = FindBiggestFish(fishColor, fishLength);
Console.WriteLine("\r\nWell now seems like you found the biggest red fish is {0}in", mdata2);
break;
case 3:
var mdata3 = FindBiggestFish(fishColor, fishLength);
Console.WriteLine("\r\nWell now seems like you found the biggest green fish is {0}in", mdata3);
break;
case 4:
var mdata4 = FindBiggestFish(fishColor, fishLength);
Console.WriteLine("\r\nWell now seems like you found the biggest pink fish is {0}in", mdata4);
break;
}
} while (!fin);
}
public static float FindBiggestFish(string[] col, float[] len)
{
float bgstCol = 0;
var colAndLen = col.Zip(len, (c, l) => new { color = c, length = l });
foreach(var cl in colAndLen)
{
if (cl.color.Distinct().Count() != cl.color.Count())
{
rptCol = cl.color;
bgstCol = cl.length;
}
}
return bgstCol;
}
Пользователь выбирает опцию из меню и применяется метод, результат должен выглядеть следующим образом :
Выбор был 1
Вау, похоже, самая большая синяя фигура sh составляет 9,6 дюйма
Метод будет видеть, что есть 4 экземпляра "синей" фигуры sh и найдите, что самый большой из 4 - 9,6.
Все это спросить, как бы я правильно реализовал это как метод? В итоге я попытался go по маршруту LINQ, чтобы объединить два массива и перебрать их с помощью foreach, но я не совсем уверен, что я делаю. Любое понимание того, как реализовать это, будет высоко ценится. Если я не могу сказать, что я новичок в программировании, так что терпите меня, спасибо.