C# 如何从字典中的列表中搜索<;字符串,列表<;字符串>&燃气轮机;
如果我有字典C# 如何从字典中的列表中搜索<;字符串,列表<;字符串>&燃气轮机;,c#,linq,dictionary,C#,Linq,Dictionary,如果我有字典 。(例如。 我想拉出键“12345”,在列表中的每个条目的字符串列表中都有“456”。 因此,我的结果将是另一个列表。 这不是用linq声明来完成的吗 这不是用linq声明来完成的吗 当然。这样做效率不高,但很简单: var input = "456"; var matchingKeys = dictionary.Where(kvp => kvp.Value.Contains(input)) .Select(kvp =
。(例如。
我想拉出键“12345”,在列表中的每个条目的字符串列表中都有“456”。
因此,我的结果将是另一个列表。
这不是用linq声明来完成的吗
这不是用linq声明来完成的吗
当然。这样做效率不高,但很简单:
var input = "456";
var matchingKeys = dictionary.Where(kvp => kvp.Value.Contains(input))
.Select(kvp => kvp.Key);
如果你想让它同样高效,你也应该存储反向映射,并同时更新两者。这也可以在没有LINQ的情况下轻松完成,尽管正如Jon提到的,如果你的字典包含很多键/值,这将不会真的高效。这里有一个扩展方法,它的功能与Jon的a完全相同nswer,无LINQ:
public static List<TKey> GetMatchingKeys<TKey, TValue>(this IDictionary<TKey, ICollection<TValue>> src, TValue toFind)
{
List<TKey> returnVal = new List<TKey>();
foreach (KeyValuePair<TKey, ICollection<TValue>> kv in src)
{
if (kv.Value.Contains(toFind))
{
returnVal.Add(kv.Key);
}
}
return returnVal;
}
公共静态列表GetMatchingKeys(此IDictionary src,TValue toFind)
{
List returnVal=新列表();
foreach(src中的键值对kv)
{
if(千伏值包含(toFind))
{
返回值添加(千伏键);
}
}
返回值;
}