如何在一个Dictionary<string, List<string>>内部的列表中搜索

3
如果我有一个字典<string, List<string>>。(例如:<12345,List<"ABC","456","123">>),我想要提取出在每个条目的字符串列表中有“456”的键'12345'。那么我的结果将是另一个列表。这不会用linq语句完成吗?
2个回答

8

这不是可以用linq语句完成吗?

当然可以。虽然效率可能不高,但很简单:

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

如果你想让它更加高效,那么你也应该存储反向映射,并同时更新两者。


0

这也可以很容易地在没有LINQ的情况下完成,尽管如Jon所提到的,如果您的字典包含大量键/值,则效率不会真正高效。这是一个扩展方法,它与Jon的回答完全相同,但没有使用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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接