二维数组与一维数组的比较

Posted

技术标签:

【中文标题】二维数组与一维数组的比较【英文标题】:comparison of two dimensional array to a one dimension array 【发布时间】:2013-05-19 18:50:43 【问题描述】:

我被困在这种情况下, 我必须将一行二维数组与一维数组进行比较。两个数组都有像 + 和 - 和 D 这样的字符。为了可用,两个数组(行和单个数组)都应该完美匹配,但如果有字符 D(表示怀疑),它应该被认为是包容性的 例如。 +,-,d 与 +,-,- 相比, +,-,d, +,d,d 程序应该返回 2 和 3 的行号。

【问题讨论】:

请尝试发布您正在使用的代码或算法,这样可以更好地了解您的问题和您正在遵循的方法。 使用像for (int rowNumber ... 这样的外部for 循环,它在0 和二维数组的垂直维度之间运行。然后在其中有另一个for 循环,例如for (int position ...,其中位置测量二维数组和一维数组的水平位置,这是我们要搜索的行。然后将arr2D[rowNumber, position]arr1D[position] 进行比较,并检查内部循环中是否一切正常。内部循环完成后,您知道是否必须生成当前的rowNumber 【参考方案1】:

类似的东西?

var mat = new[,] '-','+','d','-','-','d','-','d','+';
var arr = new[] 'd','-','+';

var matHeight = mat.GetLength(0);
var validRows = new List<int>();

for (int y = 0; y < matHeight; y++)

    bool isRowValid = true;

    for (int x = 0; x < arr.Length; x++)
    
        if (mat[y, x] != 'd' && arr[x] != 'd' && mat[y, x] != arr[x])
        
            isRowValid = false;
            break;
        
    

    if (isRowValid)
    
        validRows.Add(y);
    


foreach (var y in validRows)

    Console.WriteLine("Row 0 is valid", y);
    // will print 1 and 2 (two last rows indices)

不过,我建议使用数组数组(锯齿状数组)而不是二维数组。

【讨论】:

不是我 - 但由于 SO 不是代码生成机器,因此回答这样的“问题”被认为是不好的(没有表现出自己的努力,根本没有有用的问题,更多或不那么奇怪的描述,不关心 cmets,...) (没有投反对票!)您的mat.Lengthmat.GetLength(0) 的拼写错误。 @JeffRSon 你说得对,我只是觉得无聊,找了一些编码要做。 @JeffRSon 虽然我同意提问者如果没有在问题上表现出任何努力,就不能期望得到(有用的)答案,但实际上写一个真的“错误”吗?回答有问题的问题? 顺便说一下,对于多维数组mat,属性mat.Length 存在并返回所有mat.GetLength(i)product,其中i 运行从0 到数组的“排名”。

以上是关于二维数组与一维数组的比较的主要内容,如果未能解决你的问题,请参考以下文章

jQuery:比较二维数组和一维数组

一维数组与二维数组的拼接与二维数组增加行

如何将二维数组中的值与 GoLang 中的一维数组中的值进行比较?

一维数组复习,二维数组与多维数组

C语言指针指向一维数组与二维数组?

C语言中怎么把一维数组赋给另外一个一维数组