【问题标题】:How to create a dictionary of dictionaries...?如何创建字典字典...?
【发布时间】:2015-06-24 15:16:06
【问题描述】:

想象一下,我有一个数据库,其中包含一个或多个表,其中包含一个或多个列的多个索引...

我想创建并填充一个Dictionary<string, Dictionary<string, List<string>>>,这样我就可以获得特定表的所有索引或表和索引的特定组合的所有列。

这里是带有表名、索引名和列名的元组(示例数据)

List<Tuple<string, string, string>> tuples = new List<Tuple<string, string, string>>();
tuples.Add(Tuple.Create("T1", "I1", "C1"));
tuples.Add(Tuple.Create("T1", "I1", "C2"));
tuples.Add(Tuple.Create("T1", "I1", "C3"));
tuples.Add(Tuple.Create("T1", "I2", "C1"));
tuples.Add(Tuple.Create("T2", "I1", "C1"));
tuples.Add(Tuple.Create("T3", "I1", "C1"));
tuples.Add(Tuple.Create("T3", "I1", "C2"));
tuples.Add(Tuple.Create("T3", "I2", "C1"));
tuples.Add(Tuple.Create("T3", "I2", "C2"));
tuples.Add(Tuple.Create("T3", "I2", "C3"));

我能想到的最好的是:

Dictionary<string, Dictionary<string, List<string>>> perTI = new Dictionary<string, Dictionary<string, List<string>>>();
foreach (var group in tuples.GroupBy(x => Tuple.Create(x.Item1, x.Item2)))
{
    perTI[group.Key.Item1] = new Dictionary<string, List<string>>(){ { group.Key.Item2, group.Select(g => g.Item3).ToList() } };
}

有谁知道用 1 条 LINQ 语句来做这件事的方法吗?

【问题讨论】:

标签: c# linq linq-to-objects


【解决方案1】:

只要您愿意,就在一行中:

Dictionary<string, Dictionary<string, List<string>>> dict =
    new List<Tuple<string, string, string>>().GroupBy(item => item.Item1)
        .ToDictionary(
            groupedByItem1 => groupedByItem1.Key,
            groupedByItem1 =>
            groupedByItem1.GroupBy(item => item.Item2)
                .ToDictionary(
                    groupedByItem2 => groupedByItem2.Key,
                    groupedByItem2 => groupedByItem2.Select(item => item.Item3).ToList()));

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2016-08-26
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    相关资源
    最近更新 更多