当前位置: 首页 > 编程语言 > C#

LINQ:从字典中获取给定值列表的键,反之亦然

时间:2023-04-10 23:39:42 C#

LINQ:从字典中获取给定值列表的键,反之亦然。我对两种数据类型运行一些LINQ查询,并且经常需要在键和值之间切换。获取给定值的键列表的最佳方法是什么,反之亦然?请注意,由于我以前的LINQ查询,我通常有'IEnumerable'和'IEnumerable'并且想要像IEnumerableDictionary.GetAllKeys(IEnumerablevals)和IEnumerableDictionary.GetAllValues(IEnumerablekeys)这样的东西。也许我需要其他数据容器来完成这项任务?真诚的,亚历山大。varvalues=dictionary.Where(x=>someKeys.Contains(x.Key)).Select(x=>x.Value);varkeys=dictionary.Where(x=>someValues.Contains(x.Value)).选择(x=>x.Key);字典确实不适合按值查找键。你可以写一个双向字典,就像我在这个答案中所做的那样,但这不一定是最好的方法。当然你可以使用字典作为键/值对的序列,所以你可以:varkeysForValues=dictionary.Where(pair=>values.Contains(pair.Value)).Select(pair=>pair.Key);请注意,这将是一个O(n)操作,即使您的“值”是HashSet或类似的(具有有效的包含检查)。编辑:如果您真的不需要键/值关系——如果它们更像是成对的——那么使用List>是有道理的。查询最终是相同的,基本上:publicIEnumerableGetAllFirst(IEnumerable>source,IEnumerableseconds){HashSetsecondsSet=newHashSet(seconds);返回source.Where(pair=>secondsSet.Contains(pair.Item2));}publicIEnumerableGetAllSecond(IEnumerable>source,IEnumerablefirsts){HashSetfirstsSet=newHashSet(firsts);返回source.Where(pair=>firstsSet.Contains(pair.Item1));}最好的方式是对一组键值对执行一个linq查询,然后使用Selectprojection来选择查询结束的Keys或Values。这消除了在查询结束时执行查找的需要。例如:以上是C#学习教程:LINQ:GetthekeyofagivenvaluelistfromDictionary,反之亦然。数据=新字典();//选择包含字母'A'的键的所有值varvalues=data.Where(pair=>pair.Key.Contains("A")).Select(pair=>pair.Value);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: