Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从字典中的列表中搜索<;字符串,列表<;字符串>&燃气轮机;_C#_Linq_Dictionary - Fatal编程技术网

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))
{
返回值添加(千伏键);
}
}
返回值;
}