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

如何通过LINQ实现字典与列表按关键字匹配生成新字典?

当然有!这里有个简洁的LINQ实现方案

你可以结合Join和ToDictionary方法来快速完成这个转换,代码非常紧凑:

var newDictionary = dictionary
    .Join(records, 
          dictEntry => dictEntry.Value, 
          animal => animal.Name, 
          (dictEntry, animal) => new { dictEntry.Key, animal.Id })
    .ToDictionary(pair => pair.Key, pair => pair.Id);

代码拆解说明:

  • Join方法:负责把原字典的条目和Animal列表做关联,匹配规则是原字典的Value(比如"DOG")和Animal对象的Name属性完全一致。
  • 关联完成后,我们只保留需要的两个字段:原字典的Key(比如"dog")和对应动物的Id(比如"1"),用匿名类型打包成新的序列。
  • ToDictionary方法:把这个临时序列直接转换成目标格式的字典,键取匿名类型的Key,值取Id。

实用扩展提示:

  • 如果你的数据可能存在匹配不上的情况(比如原字典里的某个值在records中找不到对应Name),可以提前过滤或者用GroupJoin来处理;但如果能保证两边数据完全匹配,上面的代码已经足够简洁高效。
  • 如果需要忽略大小写的匹配(比如原字典值是"Dog"而Animal的Name是"DOG"),可以在Join的最后加上字符串比较器参数:
var newDictionary = dictionary
    .Join(records, 
          dictEntry => dictEntry.Value, 
          animal => animal.Name, 
          (dictEntry, animal) => new { dictEntry.Key, animal.Id },
          StringComparer.OrdinalIgnoreCase)
    .ToDictionary(pair => pair.Key, pair => pair.Id);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:09:39