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

标签 c# linq

我如何将嵌套字典展平为一些对象列表(下例中的 SomeObject),这些对象应该保存这些字典的键?

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

var nestedDictionary = new Dictionary<int, Dictionary<int, string>>();

那我们上这个类吧

public class SomeObject
{
   public int var1;
   public int var2;
   public string someStringVar;
}

如何转换 nestedDictionaryList<SomeObject>其中 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";

为此(在伪 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" }

使用 LINQ?

最佳答案

您可以使用 SelectMany()并写下类似的内容:

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

关于C# LINQ - 将嵌套字典转换为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11467957/

相关文章:

c# - "Core"作为成员名后缀的含义

c# - 在 EF Core 中配置抽象基类而不创建表

用于格式化文本的 JavaScript 函数

c# - 查询的通用实现 - 无法翻译 LINQ 表达式

linq - 你会把你的 LINQ 查询抽象成扩展方法吗

c# - 使结束日期值在用户输入开始日期并考虑闰年后准确显示 1 年

c# - 如何制作这样的数组

c# - 在其中一个属性中获取具有最大日期时间值的对象

c# - 基于 Linq 的泛型替代 Predicate<T>?

c# - Scala 最短相当于 c# LINQ