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

如何对比两个ID列表并有序输出对应分类名称?

修正ID前缀匹配逻辑并实现有序输出

问题分析

你当前的代码存在两个核心问题,导致无法得到预期结果:

  1. 判断条件错误:代码里用parentCategoryId[j] == NewCategoryId[i]做完全匹配,但需求是匹配ID的前3位前缀,这直接导致所有符合条件的项都无法被正确识别。
  2. 输出乱序且冗余:双重循环的遍历顺序完全依赖NewCategoryId的原始顺序,再加上父分类列表里的重复项,会输出大量冗余内容且顺序混乱。

修正方案

我们需要调整匹配逻辑,同时优化数据结构来实现精准匹配和有序输出:

步骤1:修正前缀匹配逻辑

把完全相等的判断,改成对比两个ID的前3位字符,用Substring(0, 3)提取前缀进行比较。

步骤2:优化父分类数据(去重)

父分类列表里存在重复的ID(比如3930000出现两次),我们可以先把父分类转换成字典,以前缀为键、对应的分类信息为值,这样既能避免重复匹配,还能提升查找效率。

步骤3:实现有序输出

如果要完全匹配预期的输出顺序,我们可以确保子分类列表的顺序和预期一致,或者在遍历前对子分类ID进行排序。

修正后的测试代码

// 修正测试数据的对应关系,匹配预期输出
List<string> parentCategoryId = new List<string> { "3930000", "4230000", "5200000" };
List<string> parentCategoryName = new List<string> { "Computers", "Furniture", "Toys" };
List<string> NewCategoryId = new List<string> { "3931700", "3931200", "4231400", "5201300" };
List<string> NewCategoryName = new List<string> { "Lenovo", "HP", "Chairs", "ToyCars" };

// 将父分类转换为字典:前缀 -> (父ID, 父分类名称),自动去重
var parentDict = parentCategoryId
    .Select((id, index) => new { 
        Prefix = id.Substring(0, 3), 
        ParentId = id, 
        ParentName = parentCategoryName[index] 
    })
    .GroupBy(item => item.Prefix)
    .ToDictionary(group => group.Key, group => group.First());

// 按子分类列表的顺序遍历输出(如需其他排序,可先对NewCategoryId排序)
for (int i = 0; i < NewCategoryId.Count; i++)
{
    string subId = NewCategoryId[i];
    string subName = NewCategoryName[i];
    string subPrefix = subId.Substring(0, 3);

    if (parentDict.TryGetValue(subPrefix, out var parentInfo))
    {
        Console.WriteLine($"{subId} {subName} {parentInfo.ParentId} {parentInfo.ParentName}");
    }
}

代码解释

  1. 父分类字典:通过LINQ把父分类转换成以前缀为键的字典,每个前缀只保留一个父分类,彻底避免重复匹配的问题。
  2. 精准前缀匹配:提取子分类ID的前3位,在字典中快速查找对应的父分类,匹配逻辑完全符合需求。
  3. 有序输出:遍历顺序和子分类列表的顺序完全一致,如果你需要其他排序规则,只需要在遍历前对NewCategoryId添加排序逻辑即可(比如NewCategoryId = NewCategoryId.OrderBy(id => id).ToList())。

针对原Excel生成代码的补充建议

在你的ExcellCreation类处理分类匹配时,也需要注意两点:

  • 添加父分类时,用Distinct()去重,避免后续出现重复的父分类项。
  • 匹配子分类和父分类时,同样使用Substring(0,3)做前缀对比,不要用完全匹配。

内容的提问来源于stack exchange,提问作者Jens Svensson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:08:11