我编写了以下代码,以从具有给定键的字典中获取所有值。
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达到此结果的简单方法?
更新:
事实证明我对字典有误解,尽管我可以为单个键使用多个值,但是我错了
答案 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();