【发布时间】:2014-01-16 21:40:54
【问题描述】:
我目前有一个Dictionary<Key, IEnumerable<Value>>,我想扩展它,所以它会变成一个Dictionary<Key, Value>。
用一个简单的 foreach 循环来做这件事很容易,但也很麻烦:
var result = new List<KeyValuePair<Key, Value>>();
foreach(var kvp in dict)
{
foreach(var v in kvp.Value)
{
result.Add(new KeyValuePair<Key, Value>(kvp.Key, v));
}
}
现在我想将其转换为单个 LINQ 查询,最好使用 lambda 语法。 (目前在项目中没有使用表达式语法anywhere,也不想从现在开始)
【问题讨论】:
-
这应该会让你大吃一惊,因为字典只支持每个键的一个值。您需要一个 MultiDictionary,而基类库中没有内置这样的东西。
-
首先,您还没有测试您尝试转换为单个 LINQ 查询的循环。这将在第一次遇到具有多个成员的 IEnumerable
值时引发“Key Already Exists”异常。 -
@Trillian @BolucPapuccuoglu 好点,我应该把它改成
IEnumerable<KeyValuePair<Key, Value>> -
@Kippie 或
Lookup<T>