【问题标题】:Get all keys in Dictionary containing value x获取字典中包含值 x 的所有键
【发布时间】:2012-12-18 05:40:53
【问题描述】:

我有这个:

Dictionary<integer, string> dict = new Dictionary<integer, string>();

我想选择字典中包含值abc 的所有项目。

是否有一个内置函数可以让我轻松做到这一点?

【问题讨论】:

    标签: c# .net vb.net dictionary


    【解决方案1】:

    嗯,使用 LINQ 相当简单:

    var matches = dict.Where(pair => pair.Value == "abc")
                      .Select(pair => pair.Key);
    

    请注意,这甚至不会有一点效率 - 这是一个 O(N) 操作,因为它需要检查每个条目。

    如果您需要经常这样做,您可能需要考虑使用其他数据结构 - Dictionary&lt;,&gt; 专为快速查找而设计按键

    【讨论】:

    • 如果你想获得值包含“abc”的键,你也可以: var matches = dict.Where(pair => pair.Value.Contains("abc") ) .Select(pair => pair.Key);
    • @User: Dictionary&lt;,&gt; 只是Dictionary&lt;TKey, TValue&gt; 的简写。你的字典有多大?您需要搜索多少个值?每秒一次并不常见,如果它是一个相当小的字典并且您只寻找一个值......
    • 字典的容量是 10 个键和 4 个值("Left","Right","Front","Back")。有时该函数每秒运行大约 10 次。
    • 对于这么小的集合,您不必担心,但是,如果您不使用 Dictionary 的特殊索引功能,最好使用 List>。
    • @stephanmg:我需要了解更多关于精确要求的信息。如果你这样的要求,我建议你在一个新的问题中询问这个问题,并提供详细信息。
    【解决方案2】:

    内置功能?不抱歉......但另一种(不太漂亮)的方法是使用foreach(KeyValuePair&lt;integer, string&gt; ...进行迭代

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2022-08-21
      • 2020-03-28
      相关资源
      最近更新 更多