如何从字典中的列表中搜索<​​string,list <string =“”>&gt; </string,>

时间:2013-07-30 16:46:06

标签: c# linq dictionary

如果我有字典     <string, List<string>>。 (例如,&lt; 12345,List&lt;“ABC”,“456”,“123”&gt;&gt; 我想拉出键'12345',我在列表中的每个条目的字符串列表中有“456”。 所以我的结果将是另一个列表。 这不是用linq语句完成的吗?

2 个答案:

答案 0 :(得分:8)

  

这不是用linq语句完成的吗?

不确定。它不会高效,但它非常简单:

var input = "456";
var matchingKeys = dictionary.Where(kvp => kvp.Value.Contains(input))
                             .Select(kvp => kvp.Key);

如果您希望它效率,您也应该存储反向映射,并同时更新。

答案 1 :(得分:0)

这也可以在没有LINQ的情况下轻松完成,尽管正如Jon所提到的,如果你的Dictionary包含很多键/值,这并不会真正有效。这是一个与Jon的答案完全相同的Extension方法,没有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;
}