代码之家  ›  专栏  ›  技术社区  ›  Rashmi Pandit

从.Net集合中的值获取密钥

  •  2
  • Rashmi Pandit  · 技术社区  · 16 年前

    我正在使用StringDictionary来存储键值对。我需要交替使用键和值,也就是说,我应该能够从值中获取键,因为在我的情况下,值是不同的。

    有没有直接的方法我可以做到(不循环)?或者如果有其他的收藏我可以用来达到这个目的?

    目前我正在循环:

    public String GetKeyFromValue(string value)
            {
                foreach (KeyValuePair<string, string> kvp in instance)
                { 
                    if (String.Equals(kvp.Value, value))
                        return kvp.Key;
                }
    
                throw new Exception ("Key not found in FilterControlMapping");
            }
    

    任何帮助都非常感谢。 谢谢。

    4 回复  |  直到 16 年前
        1
  •  5
  •   Community CDub    8 年前

    你基本上需要用两个字典封装成一个。

    已经有了实现 here here 在其他堆栈溢出问题中。

        2
  •  2
  •   nunespascal    16 年前

    我唯一能想到的是两本字典。

    D1<键,值>

    但你会重复你的数据。但是你可以用这种方法同时搜索关键字和值。

        3
  •  0
  •   Community CDub    8 年前

    最好的办法是用字典代替字符串字典。。 StringDictionary vs Dictionary<string, string> 关于检索,您应该在内部使用linq,它使用循环,但仍然是更干净的方式。。

        4
  •  0
  •   Onots    16 年前

    也可以使用字典:

    Dictionary<string, string> sd = new Dictionary<string, string>();
    string sKey = sd.Single(kvp => kvp.Value.Equals("A value")).Key;
    

    请注意,如果值出现多次,则单个方法将抛出。你可以使用First甚至FirstOrDefault。

    正如Jon Skeet评论的那样,这仍在循环。他发布到链接字典的链接提供了解决方案。