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

.NET:合并元组列表中重复项的失败产品字典

解决方案

核心思路是用**字典(Dictionary)**替代List来存储检查结果,利用字典的键唯一性快速定位重复的IProductChecker<TModel>实例,既避免了List遍历的低效查找,又能方便合并对应的失败产品字典。

具体实现代码

// 改用字典存储,键为IProductChecker实例,值为对应的失败产品字典
var failed = new Dictionary<IProductChecker<TModel>, IDictionary<int, string[]>>();

foreach (var ids in batches)
{
    var batch = Check(names, ids.ToArray()); // 返回List<(IProductChecker<TModel> checker, IDictionary<int, string[]> failedProducts)>
    
    foreach (var (checker, batchFailedProducts) in batch)
    {
        // 检查当前checker是否已存在于字典中
        if (failed.TryGetValue(checker, out var existingFailedProducts))
        {
            // 合并失败产品:将批次中的条目添加到已有字典
            foreach (var (productId, errors) in batchFailedProducts)
            {
                if (existingFailedProducts.ContainsKey(productId))
                {
                    // 同一产品ID的错误数组合并,可根据需求改为覆盖/去重
                    existingFailedProducts[productId] = existingFailedProducts[productId].Concat(errors).ToArray();
                }
                else
                {
                    existingFailedProducts.Add(productId, errors);
                }
            }
        }
        else
        {
            // 不存在则新增条目,创建字典副本避免后续修改影响存储数据
            failed.Add(checker, new Dictionary<int, string[]>(batchFailedProducts));
        }
    }
}

// 若最终需要转回原List格式,可执行以下代码
var failedList = failed.Select(kv => (name: kv.Key, failedProducts: kv.Value)).ToList();

关键说明

  • 用Dictionary<IProductChecker<TModel>, ...>替代List,利用键的唯一性快速定位重复实例,查找效率从O(n)提升至O(1),批量处理时性能更优。
  • 合并字典时,需根据业务需求调整错误信息处理逻辑:示例为合并同一产品ID的错误数组,你也可选择覆盖、去重等策略。
  • 新增条目时创建字典副本,避免后续对原批次字典的修改影响已存储的数据(若Check方法返回可修改字典)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:05:23