You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:06:03