如何展平(int,dictionary)的字典?

Posted

技术标签:

【中文标题】如何展平(int,dictionary)的字典?【英文标题】:How to Flatten a dictionary of (int, dictionary)? 【发布时间】:2021-10-19 08:47:10 【问题描述】:

我有SortedDictionary<int, Dictionary<string, HashSet<long>>>

如何使用 Linq 展平结果?

我试过了:

var result = dictionary.Values.SelectMany(x => x);

但是我如何压平到最底部呢?

我需要收集int, string, HashSet<long>

【问题讨论】:

您希望“扁平化”数据得到什么结果? 你到底想得到什么? HashSet<long>的集合? long的集合?还有什么? 【参考方案1】:

你可以使用类似下面的东西:

var flattened = dictionary.SelectMany(x => x.Value.Select(y => (x.Key, y.Key, y.Value)));

这将产生一个 ValueTyple<int, string, HashSet<long>> 的 IEnumerable。

请注意,因为这里的类型是IEnumerable,它尚未具体化。您可能希望在末尾添加 .ToList()(在这种情况下,类型将为 List<ValueTyple<int, string, HashSet<long>>>)或将其转换为您想要的任何其他集合类型。

【讨论】:

也许您想根据需要创建一个列表(集合)并避免使用varList<(int, string, HashSet<long>)>,那么它会是完美的+1 @Tim OP 没有指定他们想要一个列表。因此,可以将 IEnumerable 转换为任何集合类型。如果他们想要一个列表,他们可以简单地将 `.ToList() 附加到末尾。 是的,但是IEnumerable ICollection,所以展示如何创建一个真实的集合并没有什么坏处,它有助于理解你的方法和结果来展示类型。集合实现IEnumerable<T>,但您的结果不是集合,而是延迟执行的 LINQ 查询。 @Tim 谢谢。我已经编辑了答案以添加该信息。

以上是关于如何展平(int,dictionary)的字典?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中展平字典

如何使用嵌套字典列表展平熊猫数据框中的列

如何判断变量是否是特定类型的字典?即dict(int,str)

如何在 C# 中更新存储在 Dictionary 中的值?

如何在Swift 5中对[int:String]的字典进行排序[重复]

使用 Yield 展平字典