C#如何查找两个二维数组差异 基于NPOI实现Excel数据对比导出
问题原因与修复方案
原代码核心错误点
- 索引滥用:外层循环遍历的是原数组
firstArray2d的所有行(行数远大于差异数组diff的长度),但直接用循环变量j访问diff[j],必然触发越界。 - 未定义变量:代码中出现的
i变量没有提前声明赋值,属于无效调用。 - 语法错误:获取二维数组列数时漏写点号,应为
firstArray2d.GetLength(1)而非firstArray2dGetLength(1)。 - 赋值逻辑错误:数据赋值时行列索引混淆,
data的行索引应对应差异条目序号,而非原数组的行号。
修复后代码
// 前面提取参考列、生成firstArrayOnly的逻辑保持不变 string[] diff = firstArrayOnly.ToArray(); // 直接调用ToArray()即可,不需要手动循环赋值 int diffCount = diff.Length; // 新数组行数为差异条目数,列数和原数组保持一致即可 string[,] data = new string[diffCount, firstArray2d.GetLength(1)]; // 遍历每一条差异参考值 for (int diffIndex = 0; diffIndex < diffCount; diffIndex++) { string targetRef = diff[diffIndex]; // 去原二维数组匹配参考列值相同的行 for (int row = 0; row < firstArray2d.GetLength(0); row++) { if (firstArray2d[row, 8] == targetRef) { // 逐列复制整行数据到新数组 for (int col = 0; col < firstArray2d.GetLength(1); col++) { data[diffIndex, col] = firstArray2d[row, col]; } // 如果参考列值唯一,匹配到后直接跳出循环可提升性能 break; } } }
如果参考列存在重复值,删除break语句即可匹配所有符合条件的行。
内容的提问来源于stack exchange,提问作者eddychelene
相关产品推荐
相关产品推荐

