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

如何移除C# Dictionary中值列表不含Name='1'的键

解决方案:过滤Dictionary中不符合条件的键值对

首先明确需求:咱们要保留那些值列表里至少包含一个Name为"1"的Field对象的键值对,移除掉不满足这个条件的(比如例子里的"paperino")。下面给你两种实用的实现方式:

方式一:用LINQ生成新字典(推荐,代码更简洁)

这种方式直接通过LINQ过滤出符合条件的键值对,生成一个新的Dictionary,不会修改原字典:

// 先定义你的Field类和原始字典
public class Field { public int Id { get; set; } public string Name { get; set; } }

Dictionary<string, List<Field>> fields = new Dictionary<string, List<Field>>();
fields.Add("pippo", new List<Field>() { new Field() { Name = "1" }, new Field() { Name = "2" }, new Field() { Name = "3" } });
fields.Add("pluto", new List<Field>() { new Field() { Name = "1" } });
fields.Add("paperino", new List<Field>() { new Field() { Name = "3" } });

// 执行过滤
var filteredFields = fields
    .Where(kv => kv.Value.Any(f => f.Name == "1"))
    .ToDictionary(kv => kv.Key, kv => kv.Value);

代码解释:

  • Where(kv => kv.Value.Any(f => f.Name == "1")):筛选出所有值列表中存在Name为"1"的Field的键值对
  • ToDictionary(...):把筛选后的结果转换成新的Dictionary

方式二:修改原字典(删除不符合条件的键)

如果你想直接修改原字典而不是生成新的,需要注意不能在遍历原字典的同时删除键,否则会抛出异常。所以我们先收集所有需要删除的键,再逐个删除:

// 收集所有要删除的键:值列表里没有Name为"1"的Field的键
var keysToRemove = fields.Keys
    .Where(k => !fields[k].Any(f => f.Name == "1"))
    .ToList();

// 逐个删除这些键
foreach (var key in keysToRemove)
{
    fields.Remove(key);
}

这两种方式处理后,你的字典都会只剩下"pippo"和"pluto"两个键,和你预期的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:39:45