二维数组与一维数组的比较
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.Length
是mat.GetLength(0)
的拼写错误。
@JeffRSon 你说得对,我只是觉得无聊,找了一些编码要做。
@JeffRSon 虽然我同意提问者如果没有在问题上表现出任何努力,就不能期望得到(有用的)答案,但实际上写一个真的“错误”吗?回答有问题的问题?
顺便说一下,对于多维数组mat
,属性mat.Length
存在并返回所有mat.GetLength(i)
的product,其中i
运行从0
到数组的“排名”。以上是关于二维数组与一维数组的比较的主要内容,如果未能解决你的问题,请参考以下文章