我有一个字典,其中键是字符串,值是字符串列表。
Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>() {
{"alpha", new List<string> {"one", "two", "three"}}
{"beta", new List<string> {"four", "five", "six"}}
{"gamma", new List<string> {"seven", "eight", "nine"}}
}
当给出值中存在的字符串时,有没有办法返回密钥?
例如,给定"four"
,返回"beta"
我找到类似this的内容,但只有当值为单个而不是列表时才有效,而且我不知道如何使用列表执行此操作。
感谢。
答案 0 :(得分:3)
按值搜索字典效率不高,但是:
string firstKey = dict.Where(kv => kv.Value.Contains("four"))
.Select(kv => kv.Key)
.FirstOrDefault(); // returns null if no list contains "four"
或者如果没有列表包含给定值,您可以提供默认密钥,那么使用First
是安全的:
string firstKey = dict.Where(kv => kv.Value.Contains("foo"))
.Select(kv => kv.Key)
.DefaultIfEmpty("--no value found--")
.First(); // result: "--no value found--"
答案 1 :(得分:3)
这里的问题是任何给定字符串值都可能有多个键。因此,您需要返回一个集合而不是单个键。这可以按如下方式完成
IEnumerable<string> FindAllKeys(Dictionary<string, List<string>> map, string value) {
foreach (var pair in map) {
if (pair.Value.IndexOf(value) >= 0) {
yield return pair.Key;
}
}
}
如果你想在第一场比赛中关闭此搜索,你可以使用FirstOrDefault
扩展方法
FindAllKeys(dict, "four").FirstOrDefault();