gpt4 book ai didi

c# - 使用 LINQ 解析内部双字典?

转载 作者:行者123 更新时间:2023-11-30 12:27:15 25 4
gpt4 key购买 nike

我有一个 Dictionary<double, Dictionary<double,double>>内部字典的键是相同的,我想解析它使得输出是:

key1,dict1val1,dict2val1
key2,dict1val2,dict2val2
...

抱歉,我应该说不需要外键。

这是我所追求的一个例子:

(1.0, (1.0, 1.1)),(2.0, (1.0,1.2))
(1.0, (1.1, 1.3)),(2.0, (1.1,1.4))
(1.0, (1.2, 1.5)),(2.0, (1.2,1.6))

应该给出一个输出:

1.0,1.1,1.2
1.1,1.3,1.4
1.2,1.5,1.6

在 LINQ 中是否有一种优雅的方法可以做到这一点?我见过关于字符串字典的类似问题,但语法不适用于 double 。

我还订购了一本关于该主题的书,但我需要尽快完成。

最佳答案

您可以使用 SelectMany扩展这些类型的结构:

var expanded = dictionary.SelectMany(outer => 
outer.Value.Select(inner => new {
OuterKey = outer.Key,
InnerKey = inner.Key,
Value =inner.Value
})
);

现在你可以:

foreach (var item in expanded)
{
Console.WriteLine("{0},{1},{2}", item.OuterKey, item.InnerKey, item.Value);
}

之后,如果你想提取内部键/值组合,你可以这样做:

var byInnerKey = expanded.ToLookup(item=> item.InnerKey, item => item.Value)

使用类似的东西很容易打印

foreach (var item in byInnerKey)
{
string values = string.Join(", ",item);
Console.WriteLine(item.Key + ", " + values);
}

( live example )


注意:这里使用 this overload仅在 .net 4 及更高版本中可用的 string.Join 方法。

对于 .net 3.5 及以下版本,您可以使用 string/StringBuilder 循环值,或者显式地将它们转换为字符串数组

string values = string.Join(", ",item.Select(d => d.ToString()).ToArray());

( live example 3.5 )

关于c# - 使用 LINQ 解析内部双字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25804999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com