C# Dictionary通过LINQ过滤值后如何获取对应键?
解决字典过滤时保留对应键的问题
嗨,这个问题很常见——当你直接操作fooDictionary.Values时,确实会丢失对应的键信息。解决方案其实很简单,直接遍历字典的**键值对(KeyValuePair)**就好,这样就能同时拿到符合条件的MyObject和它关联的键啦!
具体实现步骤
你不需要先单独提取Values,而是直接对字典本身进行过滤,这样每个结果项都会包含Key和Value:
先获取过滤后的键值对集合
这一步会保留所有Boo属性为false的对象及其对应键:var filteredKeyValues = fooDictionary.Where(kvp => kvp.Value.Boo == false).ToList();分别提取键和对象,调用扩展方法
从键值对集合里可以轻松拆分出你需要的键列表,以及用来调用扩展方法的对象列表:// 获取所有符合条件的键 var matchingKeys = filteredKeyValues.Select(kvp => kvp.Key).ToList(); // 获取符合条件的对象列表并调用你的扩展方法 var extensionResult = filteredKeyValues.Select(kvp => kvp.Value).ToList().ExtensionMethod();
更紧凑的写法
如果你想减少变量,可以合并部分步骤,但可读性可能稍差一点:
// 先过滤得到键值对 var filteredPairs = fooDictionary.Where(kvp => kvp.Value.Boo == false); // 调用扩展方法 var result = filteredPairs.Select(kvp => kvp.Value).ToList().ExtensionMethod(); // 获取对应的键 var matchingKeys = filteredPairs.Select(kvp => kvp.Key).ToList();
核心逻辑就是:不要一开始就丢弃键的信息,直接从字典的完整键值对集合出发进行过滤,这样就能同时保留你需要的键和对象啦。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

