如何从字典中的列表中搜索<;字符串,列表<;字符串>>;

本文关键字:lt 字符串 gt 列表 字典 搜索 | 更新日期: 2023-09-27 18:25:28

如果我有字典CCD_ 1。(例如<12345、List<"ABC"、"456"、"123">>我想拔出键"12345",在列表中每个条目的字符串列表中都有"456"。所以我的结果将是另一个列表。这不是用linq语句来完成的吗?

如何从字典中的列表中搜索<;字符串,列表<;字符串>>;

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

当然。它不会有效率,但它很简单:

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

如果你想让它也高效,你也应该存储反向映射,并将两者一起更新。

这在没有LINQ的情况下也可以很容易地完成,尽管正如Jon所说,如果字典包含大量键/值,这将不会很有效。这里有一个与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;
}