从.Net集合中获取密钥

时间:2009-05-15 05:46:14

标签: collections .net-2.0 dictionary

我使用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 个答案:

答案 0 :(得分:5)

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

其他Stack Overflow问题中已经有实现herehere

答案 1 :(得分:2)

我能想到的唯一方法就是两本词典。

D1&lt;键,值&gt; D2&lt;价值,关键&gt;

你会重复你的数据。但是你可以用这种方式搜索键和值。

答案 2 :(得分:0)

这也可以使用Dictionary:

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

请注意,如果值多次出现,则抛出Single方法。您可以使用First或甚至FirstOrDefault。

编辑: 正如Jon Skeet评论的那样,这仍然是循环的。他发布到链接词典的链接提供了解决方案。

答案 3 :(得分:0)

最好的想法是使用Dictionary而不是StringDictionary作为它的obselete .. 你可以在这里找到更多相关信息: StringDictionary vs Dictionary<string, string> 关于回溯你应该在内部使用linq它使用循环,但仍然是更清洁的方式..