从值获取键 - Dictionary <string,List <string >>

Kri*_*shh 10 c# dictionary c#-3.0 c#-4.0

我通过指定值来获取密钥时遇到问题.我能做到这一点的最佳方式是什么?

var st1= new List<string> { "NY", "CT", "ME" };
var st2= new List<string> { "KY", "TN", "SC" };
var st3= new List<string> { "TX", "OK", "MO" };
var statesToEmailDictionary = new Dictionary<string, List<string>>();
statesToEmailDictionary.Add("test1@gmail.com", st1);
statesToEmailDictionary.Add("test2@gmail.com", st2);
statesToEmailDictionary.Add("test3@gmail.com", st3);

var emailAdd = statesToEmailDictionary.FirstOrDefault(x => x.Value.Where(y => y.Contains(state))).Key;
Run Code Online (Sandbox Code Playgroud)

p.s*_*w.g 19

返回值FirstOrDefault将是a KeyValuePair<string, List<string>>,因此要获取密钥,只需使用该Key属性即可.像这样:

var emailAdd = statesToEmailDictionary
    .FirstOrDefault(x => x.Value.Contains(state))
    .Key;
Run Code Online (Sandbox Code Playgroud)

或者,这是查询语法中的等价物:

var emailAdd = 
    (from p in statesToEmailDictionary
     where p.Value.Contains(state)
     select p.Key)
    .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

  • @ChrisMarisic'OrDefault'案例返回您要迭代的类型的默认值.对于引用类型,这是"null",但对于值类型,它将是该类型的新实例.由于`KeyValuePair <TKey,TValue>`是一种值类型(即`struct`),'OrDefault'情况不会导致空引用异常.由于`TKey`这里是`string`,新实例的`.Key`将是'null`. (2认同)