C#LINQ - 将嵌套字典转换为列表

Mir*_*rek 12 c# linq

如何将嵌套字典展平为一些对象的列表(SomeObject在下面的示例中)应该包含这些字典的键?

例如:让我们有一个以下类型的字典

var nestedDictionary = new Dictionary<int, Dictionary<int, string>>();
Run Code Online (Sandbox Code Playgroud)

那么,让我们来上课吧

public class SomeObject
{
   public int var1;
   public int var2;
   public string someStringVar;
}
Run Code Online (Sandbox Code Playgroud)

如何转换nestedDictionaryList<SomeObject>where var1是外部字典var2的键,是内部字典的键,是内部字典someStringVar的字符串值?

基本上,我该如何转移:

nestedDict[0][0] = "foo";
nestedDict[0][1] = "bar";
nestedDict[0][2] = "foo1";
nestedDict[1][0] = "bar1";
nestedDict[1][1] = "foo2";
nestedDict[1][2] = "bar2";
Run Code Online (Sandbox Code Playgroud)

对此(在伪C#中只是为了可视化)

objList[0] = SomeObject { var1 = 0, var2 = 0, someStringVar = "foo" }
objList[1] = SomeObject { var1 = 0, var2 = 1, someStringVar = "bar" }
objList[2] = SomeObject { var1 = 0, var2 = 2, someStringVar = "foo1" }
objList[3] = SomeObject { var1 = 1, var2 = 0, someStringVar = "bar1" }
objList[4] = SomeObject { var1 = 1, var2 = 1, someStringVar = "foo2" }
objList[5] = SomeObject { var1 = 1, var2 = 2, someStringVar = "bar2" }
Run Code Online (Sandbox Code Playgroud)

使用LINQ?

Fré*_*idi 11

您可以使用SelectMany()并编写如下内容:

var objList = nestedDictionary.SelectMany(
    pair => pair.Value.Select(
        innerPair => new SomeObject() {
            var1 = pair.Key,
            var2 = innerPair.Key,
            someStringVar = innerPair.Value
        })).ToList();
Run Code Online (Sandbox Code Playgroud)


dig*_*All 9

这应该工作:

var flattened =
from kvpOuter in nestedDictionary
from kvpInner in kvpOuter.Value
select new SomeObject()
{
    var1 = kvpOuter.Key,
    var2 = kvpInner.Key,
    someStringVar = kvpInner.Value
};
var list = flattened.ToList(); // if you need a list...
Run Code Online (Sandbox Code Playgroud)