我有一本包含键和值的字典。是否可以获取所有具有相同值的Key?
示例 1 = 456894、2 = 548962、3 = 548962、4 = 654876 ,然后获得密钥2和3,因为它具有相同的值。
Dictionary<int, int> doublechek = new Dictionary<int, int>();
答案 0 :(得分:7)
一种可能的方法:
var result = doublechek
.GroupBy(z => z.Value)
.Where(z => z.Count() > 1)
.SelectMany(z => z)
.Select(z => z.Key)
.ToList();
GroupBy
和Count
将仅获得重复项。 SelectMany
和Key
将获得重复项(即2和3)的密钥。
答案 1 :(得分:1)
我将创建一个新的“翻转”字典,其中包含来自doublecheck
的所有唯一值作为键,并为每个键列出包含来自doublecheck
的所有具有引用值的键的值列表
像这样:
Dictionary<int, List<int>> flipped = new Dictionary<int, List<int>>();
foreach (var key in doublecheck.Keys)
{
if (!flipped.ContainsKey(doublecheck[key]))
flipped.Add(doublecheck[key], new List<int>());
flipped[doublecheck[key]].Add(key);
}
字典flipped
可用于查找doublecheck
中具有您要搜索的值的所有键。
更新
使用TryGetValue
时,代码如下:
Dictionary<int, List<int>> flipped = new Dictionary<int, List<int>>();
foreach (var key in doublecheck.Keys)
{
if (!flipped.TryGetValue(doublecheck[key], out var valueList);
{
valueList = new List<int>();
flipped.Add(doublecheck[key], valueList);
}
valueList.Add(key);
}
return true;