c# - 如何在c#中找到两个二维数组之间的差异
问题描述
我有两个 excel 文件,我想提取它们之间的差异以放入另一个 excel 文件。
为了找到差异,我使用每个文件中的特定参考列进行比较。
使用 NPOI 库,我将每个 excel 中的数据存储在两个二维数组中,通过将引用列放在一维数组中并像下面这样比较它们,我能够找到两者之间的差异
//copying the values in the references columns to unidimensional arrays
for (int j = 0; j<firstArray.length; j++)
firstArray[j] = firstArray2d[j, 8];
for (int j = 0; j<secondArray.length; j++)
secondArray[j] = secondArray2d[j, 8];
//below I extract the difference between the unidimensional arrays
IEnumerable<string> firstArrayOnly = firstArray.Except(secondArray);
要将差异复制到新文件中,我试图首先将其放入第三个二维数组,然后写入 excel,但我很难将差异与第三个二维数组
我尝试了以下
string [] diff = new string[firstArrayOnly.Count()];
int cont = 0;
foreach (var n in firstArrayOnly)
{
diff[cont]=n;
cont++;
}
//until here works fine, the problem comes below
string[,] data = new string [firstArrayOnly.Count(),9];
for (int j = 0; j < firstArray2d.GetLength(0); j++)
{
string aux = diff[j];
if (firstArray2d[i,8] == aux)
for (int x = 0; x < firstArray2dGetLength(1); x++)
data[i,x] = firstArray2d[i,j];
}
O 不断让索引越界
解决方案
无需将数据复制到一维数组,只需编写一个在两个维度上迭代的双循环。例如,假设您有两个二维数组,a
并且b
:
var l0 = Math.Min(a.GetLength(0), b.GetLength(0));
var l1 = Math.Min(a.GetLength(1), b.GetLength(1));
var diff = new bool[l0, l1];
for (int i0 = 0; i0 < l0; i0++)
{
for (int i1 = 0; i1 < l1; i1++)
{
if (!a[i0, i1].Equals(b[i0, i1]))
{
diff[i0, i1] = true;
}
}
}
这会产生一个布尔数组,其中只有两个矩阵的重叠部分,并标记值是否不同。如果它们不同,将其更改为返回一个或另一个值应该是微不足道的。
推荐阅读
- node.js - 如何将图像作为 REST API 响应发送?要遵循哪些准则?
- python - 如何实施储蓄?
- python - 查找使用 OpenCV 检测到的轮廓的坐标(X,Y)
- data-visualization - 如何在画面中打开/关闭地理地图点?
- mongodb - 从远程主机连接到 Docker 容器内的 Mongo Router
- python - 如何删除 AWS 账户上的所有 IAM 角色
- python - Python (Pandas) 等价于 R:as.numeric()
- angular - Angular4 在 IE11 中抛出错误“SCRIPT1006: Expected ')'”
- c# - 如果新行为空,C#如何在字符串中显示\n字符
- node.js - Sequelize 关联 mixins,foreignKey 不能为空