C#字典获取具有相同值的所有键

时间:2019-10-24 06:28:16

标签: c# dictionary

我有一本包含键和值的字典。是否可以获取所有具有相同值的Key?

示例 1 = 456894、2 = 548962、3 = 548962、4 = 654876 ,然后获得密钥2和3,因为它具有相同的值。

Dictionary<int, int> doublechek = new Dictionary<int, int>();

2 个答案:

答案 0 :(得分:7)

一种可能的方法:

var result = doublechek
    .GroupBy(z => z.Value)
    .Where(z => z.Count() > 1)
    .SelectMany(z => z)
    .Select(z => z.Key)
    .ToList();

GroupByCount将仅获得重复项。 SelectManyKey将获得重复项(即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;