【发布时间】:2013-07-30 16:46:06
【问题描述】:
如果我有字典
<string, List<string>>。 (例如>
我想拉出键'12345',其中列表中每个条目的字符串列表中有“456”。
所以我的结果将是另一个列表。
这不是用 linq 语句来完成的吗?
【问题讨论】:
标签: c# linq dictionary
如果我有字典
<string, List<string>>。 (例如>
我想拉出键'12345',其中列表中每个条目的字符串列表中有“456”。
所以我的结果将是另一个列表。
这不是用 linq 语句来完成的吗?
【问题讨论】:
标签: c# linq dictionary
这不是用 linq 语句来完成的吗?
当然。它不会高效,但它非常简单:
var input = "456";
var matchingKeys = dictionary.Where(kvp => kvp.Value.Contains(input))
.Select(kvp => kvp.Key);
如果您也希望它高效,您也应该存储反向映射,并同时更新两者。
【讨论】:
这也可以在没有 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;
}
【讨论】: