使用LINQ从Dictionary中的键获取值列表

时间:2019-10-10 14:36:29

标签: c# linq dictionary

我编写了以下代码,以从具有给定键的字典中获取所有值。

        Dictionary<string,string> _dictionary;

        public List<string> GetValuesUsingKey(string key)
        {
            List<string> outp = new List<string>();
            foreach(var d in _dictionary)
            {
                if (d.Key == key)
                {
                    outp.Add(d.Value);
                }
            }
            return outp;
        } 

是否有使用LINQ达到此结果的简单方法?

更新:

事实证明我对字典有误解,尽管我可以为单个键使用多个值,但是我错了

2 个答案:

答案 0 :(得分:3)

保证Dictionary中的键是唯一的,因此无需返回List

public string GetValueUsingKey(string key)
{
  bool isKeyPresent = _dictionary.TryGetValue(key, out var output);
  return isKeyPresent ? output : _YOUR_DEFAULT_BEHAVIOUR_;
}

Dictionary的一大优点是使用键插入和检索值的时间复杂度为O(1);如果您遍历所有KeyValuePair,则其中包含的内容将完全废止使用Dictionary的目的,因为这会使检索O(n)

答案 1 :(得分:0)

Dictionary是一对一的映射,给定键不能有多个值。

另一方面,

ILookup支持这种情况以及空键:

using System.Linq;

class Element
{
    public string Key { get; }
    public string Value { get; }
    ...
}

IEnumerable<Element> elements = ...
ILookup<string, string> lookup = elements.ToLookup(e => e.Key, e => e.Value);

然后得到您的结果:

List<string> outp = lookup[key].ToList();