2013-10-02 80 views
0

我想有一个非常简洁的方法来做到这一点,但我是新来的.NET。我有一堆映射对。该映射虽然两种方式。我想存储一次,像这样:选择键和返回值或选择值并返回键

{"a", "a'"}, 
{"b", "b'"}, 
... 

使用Dictionary什么的。我知道我可以使用linq轻松查询字典,但是如果我查询一个值或者如果我输入一个键时返回值,我怎么能有条件地让它返回键?例如,如果输入b',则输出b。如果输入a,则输出a'

数据结构不一定非得是字典。我只想要最简洁的方式来存储它,并以最简洁的方式来检索它。这不是性能密集型的。

回答

2

创建字典扩展方法。

public static string Retrieve(this Dictionary<string,string> dictionary, string value) 
    { 
     var item = (from v in dictionary 
        where v.Key == value || v.Value == value 
        select (v.Key == value) ? v.Value : v.Key 
        ).FirstOrDefault(); 

     return item; 
    } 
+0

问题是,我不知道如果它匹配键或值。我必须知道它匹配哪个,所以我可以返回相应的值。 – tau

+1

对不起,如何编辑 –

3

最简洁的方法是使用一个字典,并把它的一切,例如:

{ "a", "a'" } 
{ "a'", "a" } 
{ "b", "b'" } 
{ "b'", "b" } 

查找和使用将是快速和清晰

+0

我完全同意,这将是我的一般方法,但我希望c#已经有这个东西了。 – tau

+1

@tau你总是可以为'Dictionary '创建一个包装类,它可以做到这一点。 –

+0

如果你事先知道你主要使用了查找键,但偶尔需要按值查找,你可以使用像dict.Where(x => x ==“value”)。FirstOrDefault,但如果你通常必须搜索它可能相当缓慢的值。 – Dweeberly