3

if I have a dictionary <string, List<string>>. (ex. <12345, List<"ABC", "456", "123">> and I want to pull out the key '12345' where I have "456" in the list of strings for each entry in the list. So my result would be another list. Wouldn't this be done with a linq statement?

4

2 回答 2

8

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

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

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

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

于 2013-07-30T16:47:33.793 回答
0

这也可以在没有 LINQ 的情况下轻松完成,尽管正如 Jon 所提到的,如果您的 Dictionary 包含很多键/值,这将不会真正有效。这是一个与 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;
}
于 2013-07-30T17:26:22.227 回答