【发布时间】:2021-03-24 00:15:52
【问题描述】:
可以使用哪种类型的数据结构(或数据结构?)来存储可以访问数据的二维数据透视表?例如,让我们从 Excel 中复制以下内容:
如果数据都在一维层次结构中——也就是说,它是组 > 产品 > 年份 > 价值,我们可以按照以下方式做一些事情:
{
"Electronics": {
"(all)": {
"Year": {
"2018": 2,
"2019": 1,
"Grand Total": 3
}
},
"Computer": {
"Year": {
"2018": 1,
"2019": 0,
"Grand Total": 1
}
},
"Phone": {
"Year": {
"2018": 1,
"2019": 1,
"Grand Total": 2
}
}
}
}
然后我可以通过以下方式访问 Electronics > Computer > 2018 的 Value:
obj["Electronics"]['Computer']['Year']
// {2018: 1, 2019: 0, Grand Total: 1}
obj["Electronics"]['Computer']['Year'][2018]
// 1
但我想不出如何将它放入二维多维数组之外的二维数据结构中,除了能够在某个特定位置检索值之外,它实际上没有任何用途位置(我需要存储大量元数据才能知道存储在哪个位置)。
什么是合适的数据结构?我已经标记了 Java、C、C++——任何语言都可以,我对实际的数据结构更感兴趣。
【问题讨论】:
-
这个问题实在是太开放了,不适合 Stack Overflow。也就是说,“数据透视表”实际上是对普通旧数据集进行分组和聚合的特定配置。您应该分别关注三个部分:数据库本身(实际的数据库或只是内存中的表,或其他),产生所需聚合结果的查询,最后是这些聚合结果的可视化表示.
-
人们会在这里堆积答案,因为赏金。但我怀疑任何对你真的有帮助。我建议再次阅读How to Ask。我意识到你有足够的声誉,你必须对提出一个好问题(直接或间接)有一些洞察力,但为了不浪费赏金,让它更容易回答可能是一个明智之举。所以请原谅我再次提及它。
-
我得到的印象是图片中的第一行有冗余数据,可以从其余数据中确定。或者这就是你问题的重点?请考虑定义您对“数据透视表”的理解,也许可以参考您所学的上下文;例如“MS Excel”。
-
@Yunnosch 肯定会添加一些细节。
-
如果数据采用您显示的输入格式(看起来像 JSON),请考虑提供一个minimal reproducible example,说明您如何读取、存储并按原样输出。这将显示数据结构、输入/输出机制和输出格式。在那个“输出机制”中,也可以是类似于要填充的数据结构,对于给定的样本输入具有期望的结果。 IE。你有所需程序的前三分之一和第三个三分之一。填写缺少的第二个三分之一作为答案会更容易,并且可能对您更有帮助。为此,您可能需要决定一种语言。
标签: java c++ c data-structures pivot-table