该方法试图做的是,与抽奖相比,返回每张彩票的正确选票数,彩票变量是2D数组。
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)被确定为原因
答案 0 :(得分:0)
代码有几个问题
主要是您如何获得长度。但是,您会发现使用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();
基本前提是,对于每张票证, Sum 每张票证row
中的元素包含抽奖元素t
免责声明 :完全未经测试
祝你好运
其他资源
在语句中使用yield关键字时,表示 出现在其中的方法,运算符或get访问器是一个迭代器。 使用yield定义迭代器,无需显式 额外的类(持有枚举状态的类,请参见 以IEnumerator为例),当您实现IEnumerable和 自定义集合类型的IEnumerator模式。
计算一系列数值的总和。
确定元素是否在列表中。
条件运算符(?:),通常称为三元运算符 条件运算符,根据值返回两个值之一 布尔表达式。以下是条件句的语法 运算符。