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

C# 实现Dictionary与List取交集并返回匹配的完整字典项

解决方案

核心思路

不要只取Dictionary的Values做交集,直接遍历字典的完整KeyValuePair项,过滤出Value存在于目标List中的项,再按需转为字典即可。

代码实现

基础版本(适合List数据量小的场景)

static void Test()
{
    var dict = new Dictionary<string, string>();
    dict.Add("license1", "123");
    dict.Add("license2", "456");
    dict.Add("license3", "789");

    var list = new List<string>();
    list.Add("444");
    list.Add("111");
    list.Add("123");

    // 过滤匹配项并转为新字典
    var result = dict.Where(kv => list.Contains(kv.Value))
                     .ToDictionary(kv => kv.Key, kv => kv.Value);
}

运行后result就是你期望的{"license1": "123"}结果。

性能优化版本(适合List数据量大的场景)

如果List元素较多,先将List转为HashSet可以将查找复杂度从O(n)降到O(1),大幅提升过滤效率:

static void Test()
{
    var dict = new Dictionary<string, string>();
    dict.Add("license1", "123");
    dict.Add("license2", "456");
    dict.Add("license3", "789");

    var list = new List<string>();
    list.Add("444");
    list.Add("111");
    list.Add("123");

    // 先转HashSet优化查找性能
    var matchValueSet = new HashSet<string>(list);
    var result = dict.Where(kv => matchValueSet.Contains(kv.Value))
                     .ToDictionary(kv => kv.Key, kv => kv.Value);
}

补充说明

  • 如果不需要最终结果为字典格式,去掉最后的ToDictionary调用,直接保留Where返回的IEnumerable<KeyValuePair<string, string>>集合即可。
  • 若字典存在多个Key对应同一个匹配Value的情况,所有符合条件的键值对都会被返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:01