c# - 给定两个数组(String[],Float[]),如何实现找到最大值的方法
问题描述
我有两个数组,每个数组都有 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”的字符串,每个字符串都有一个对应的 float 值:
fishColor[0] = "Blue" 将与 fishLength[0] = 8.2
配对 fishColor[4] = "Blue" 将与 fishLength[4] = 5.5 配对
ETC...
该方法必须能够在重复项中找到最大的。
对于上下文,我有一个菜单,列出了字符串数组中的四种不同颜色。该程序中唯一的用户输入将是用户选择的菜单选项,因此是其中一种颜色。
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
哇,看起来最大的蓝鱼有 9.6 英寸
该方法将看到有 4 个“蓝色”鱼实例,并确定 4 个实例中最大的一个是 9.6。
所有这些要问,我将如何正确地将其作为一种方法实现?我最终尝试走 LINQ 路线,以便将两个数组配对在一起并使用 foreach 遍历它们,但我不太确定自己在做什么。任何有关如何实现这一点的见解将不胜感激。如果你还不能告诉我我是编程新手,请多多包涵,谢谢。
解决方案
您可以尝试Zip
以创建颜色/长度对
var result = fishColor
.Zip(fishLength, (c, l) => new {c, l})
.Where(item => item.c == givenColor)
.Max(item => item.l);
推荐阅读
- react-native - 如何在 React Native 中创建可滑动的底页?
- php - php SELECT查询在mysqli面向对象中的fetch_assoc的while循环中给出错误
- node.js - koa 和 sqlite3 节点 REST 端点仅返回数据库对象而不是数据
- android - 如何在 android 的 RecyclerView 中更改另一个项目的状态
- angular - 隐藏在 Angular 中的响应式表单中
- python - ECOS 求解器在 CVXPY 1.0 版本中停止工作
- r - 脚本的日志记录名称 - futile.logger R
- c# - 如何解决错误“此模式下不允许递归读取锁定获取”
- c - 为什么 ififd 的 pci linux 实现使用“platform_driver”而不是“pci_driver”?
- c# - 使用 C# 获取输出 POST 请求