C# 展开IDictionary
我现在有一本字典,我想扩展它,所以它将成为一本字典 使用简单的foreach循环执行此操作很容易,但也很麻烦:C# 展开IDictionary,c#,linq,lambda,C#,Linq,Lambda,我现在有一本字典,我想扩展它,所以它将成为一本字典 使用简单的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))
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语法。目前在项目中的任何地方都没有使用表达式语法,也不想现在就开始使用使用LINQ inline如何: var结果=来自dict中的kvp 从v到kvp.值 选择new KeyValuePairkvp.Key,v 托利斯特先生;
但是,我不知道lambda语法。使用LINQ inline如何: var结果=来自dict中的kvp 从v到kvp.值 选择new KeyValuePairkvp.Key,v 托利斯特先生;
但是,我不知道lambda语法。不能添加同一个键两次,但这会发生在嵌套循环中 如果您想将其展平为注释中的IEnumerable,可以使用SelectMany:
不能两次添加同一个键,但这会发生在嵌套循环中 如果您想将其展平为注释中的IEnumerable,可以使用SelectMany: 您可以使用查找,因为它支持每个值有多个键
var dict = new Dictionary<string, IEnumerable<string>>();
var lookUp = dictionary
.SelectMany(pair => pair.Value
.Select(value => new { Key = pair.Key, Value = value }))
.ToLookup(pair => pair.Key, pair => pair.Value);
您可以使用查找,因为它支持每个值有多个键
var dict = new Dictionary<string, IEnumerable<string>>();
var lookUp = dictionary
.SelectMany(pair => pair.Value
.Select(value => new { Key = pair.Key, Value = value }))
.ToLookup(pair => pair.Key, pair => pair.Value);
这应该会让你大吃一惊,因为字典每个键只支持一个值。您需要一个多字典,并且基类库中没有内置这样的东西。这将在第一次遇到包含多个成员的IEnumerable值时引发键已存在异常。@Trillian@BolucPapuccuoglu很好,我可能应该将其更改为IEnumerable@Kippie或者查找一下,这应该会让您大吃一惊,因为字典每个键只支持一个值。您需要一个多字典,并且基类库中没有内置这样的东西。这将在第一次遇到包含多个成员的IEnumerable值时引发键已存在异常。@Trillian@BolucPapuccuoglu很好,我可能应该将其更改为IEnumerable@Kippie或者对LookupWell来说,这很有效,尽管我真的希望它是lambda,但是。好吧,这很有效,虽然我真的很想成为兰姆达,但是。太好了,那就行了!太好了,这就行了!