我最近试图完成一个相当不错的LeetCode练习,我可以说我尝试使用的解决方案不是最好的,但这仍然是一种好的做法。但是,我注意到在使用Array.Exists函数时,无法获得与使用Console.WriteLine进行调试时期望的一致的结果。当然,我在锯齿状的数组上使用了它,但是我想这会起作用,在数组上逐行迭代。考虑以下示例二维数组:
[[0,1],[0,1],[0,1]]
给出此数组,您将认为在遍历该数组时,您将能够使用Array.Exists来发现每个子数组确实存在1和0,就像在运行这些行时一样:
Console.WriteLine(Array.Exists<int>(grid[i], x => x.Equals(0)));
Console.WriteLine(Array.Exists<int>(grid[i], x => x.Equals(1)));
我希望在使用i和j迭代器遍历数组时返回以下内容:
True
True
但是,当从FIRST子数组(例如,从grid [0]移到grid [1]时),我会得到假阴性,好像数组中确实没有1,我们知道这是假的:
True
False
在这个锯齿状的数组中,这两个都是正确的,但显然,至少在LeetCode网站上不是这样。
其他人还能复制吗?
这是一个小程序,显示在控制台应用程序中运行时我正在谈论的问题:
using System;
public class Solution {
public static void Main(String[] args) {
int[][] exampleGrid = new int[][]
{
new int[] {2,0},
new int[] {1,0}
};
Solution.Feedback(exampleGrid);
}
public static void Feedback(int[][] grid) {
for(int i = 0; i < grid.GetLength(0); i++)
{
Console.WriteLine(Array.Exists<int>(grid[i], x => x.Equals(0)));
Console.WriteLine(Array.Exists<int>(grid[i], x => x.Equals(1)));
}
}
}
请注意:仅在mono 5.18.0-C#7中可以重现。
我可以确认这绝对不是任何形式的编译器错误,而是代码本身。我无法在他们的操场上的Leetcode上进行复制。
然后我发现这绝对是我自己的错误。去图吧!
对于那些希望找到我的错误,进行任何输入或其他不同的人,请随时转到这里:
https://leetcode.com/playground/PSz4zMzL
但是这不再是本文的讨论范围,因此,我将继续讨论。