c# - 二维数组尺寸和遍历
问题描述
该方法试图做的是,与平局相比,返回每张票的正确选择数,票变量是一个二维数组。
private int[] lottoMatches(int[] draw, int[][] ticket)
{
// TODO
List<int> finalresult = new List<int>();
for(int r = 0; r < ticket.GetLength(0); r++)
{
int drw = 0, tck = 0;
List<int> result = new List<int>();
while (drw < draw.Length && tck < ticket.GetLength(1))
{
if (ticket[r][tck] == draw[drw])
{
result.Add(ticket[r][tck]);
}
else
{
drw++;
}
if (drw == draw.Length && tck < ticket.Length)
{
tck++;
drw = 0;
}
}
finalresult.Add(result.Count);
}
return finalresult.ToArray();
}
指数数组的边界之外。' 运行时返回错误,ticket.GetLength(1) 被识别为原因
解决方案
代码有几个问题
主要是你如何获得长度。但是,您会发现使用yield
、 IEnumerable.Sum
、List<T>.Contains
和条件操作符的更优雅的解决方案
private static IEnumerable<int> lottoMatches(int[] draw, int[][] ticket)
{
for (var row = 0; row < ticket.GetLength(0); row++)
yield return draw.Sum(t => (ticket[row].Contains(t) ? 1 : 0));
}
用法
foreach(var result = lottoMatches(draw,tickets))
{
Console.WeiteLine(Result);
}
或者
var results = lottoMatches(draw,tickets).ToArray();
基本前提,是对每张票,对每张票中包含抽奖元素的元素求和row
t
免责声明:完全未经测试
祝你好运
其他资源
在语句中使用 yield 关键字时,表明它出现的方法、运算符或 get 访问器是迭代器。当您为自定义集合类型实现 IEnumerable 和 IEnumerator 模式时,使用 yield 定义迭代器无需显式的额外类(保存枚举状态的类,请参见 IEnumerator 示例)。
计算一系列数值的总和。
确定元素是否在列表中。
条件运算符 (?:),通常称为三元条件运算符,根据布尔表达式的值返回两个值之一。以下是条件运算符的语法。
推荐阅读
- eclipse - 为什么 Eclipse 在应该使用 JUnit4 时却尝试使用 JUnit5?
- c# - Hangfire ContinueWithJob 卡在等待状态,尽管父作业已成功
- c - 以下 C 代码显示:格式“%c”需要“int”类型的参数,但参数 3 的类型为 char*
- php - PHP Closures - 获取闭包范围起源的类名
- javascript - 在 Bootstrap Datetimepicker 上禁用特定日期的特定时间
- matlab - Octave 和 area() 方法的问题
- flutter - 即使应用程序关闭或终止,flutter 中的异步操作是否仍在运行
- javascript - 为什么我的 javascript 的表单循环在添加数组时返回 NAN
- java - XSLT 选择特定节点,并从 Java 参数化它
- scala - Scala - 需要类类型,但使用 objectMapper 找到 T