本帖最后由 523066680 于 2021-12-18 08:49 编辑
备用标题:将数据节点关系清单还原为多层级哈希结构- 数据是从跨境电商平台获取的类目清单,但是这个清单是二维的,提供了所有键值的关系 [ 父级ID,当前项ID,当前项的名称,以及当前的类目层级 ]
- 在制作平台类目交易指数数据可视化的时候需要分级显示,于是就必须把这些平面展开的关联信息还原为多层级的数据结构
-
- 处理要求:只需要还原ID层级结构,结构中不需要包含项的中文名等信息。同层级的清单使用数组或者哈希映射没有要求,只要能递进枚举就行。
- 语言:不限
复制代码 有一种很粗暴的方法,就是多次扫描整个列表。第一次扫描寻找0为父级ID的项,创建第一层键值关系;针对每一个子键,扫描清单寻找该键的子节点,创建第二层关系。
但这种方式效率极低,期待不一样的答案。
附精简过的原始数据(plain.json),- {
- "data" : [
- [ 0, 30, "安全防护", 1 ],
- [ 30, 3030, "门禁", 2 ],
- [ 30, 3009, "消防器材", 2 ],
- [ 30, 3011, "视频监控", 2 ],
- [ 3011, 200327188, "视频监控配件", 3 ],
- [ 30, 3007, "劳动保护用品", 2 ],
- [ 0, 21, "办公、文化及教育用品", 1 ],
- [ 21, 2213, "期刊与杂志", 2 ],
- [ 21, 212002, "展示告示用品", 2 ],
- [ 212002, 21200202, "黑板", 3 ],
- [ 212002, 100003132, "白板擦、黑板擦等", 3 ],
- [ 100003132, 100003183, "黑板擦", 4 ],
- [ 100003132, 100003182, "白板擦", 4 ],
- [ 0, 509, "电话和通讯", 1 ],
- [ 509, 100001205, "手机配件", 2 ],
- [ 509, 50906, "对讲机", 2 ],
- [ 0, 7, "电脑和办公", 1 ],
- [ 7, 200001083, "笔记本电脑部件及配件", 2 ],
- [ 7, 70806, "电脑连线及接插件", 2 ],
- [ 0, 44, "消费电子", 1 ],
- [ 44, 629, "零配件", 2 ],
- [ 44, 100000305, "摄影摄像", 2 ]
- ]
- }
复制代码 处理后的结果(只做参考,不强制约束格式,参考前面的处理要求):- {
- "0" : {
- "21" : {
- "212002" : {
- "100003132" : {
- "100003182" : {},
- "100003183" : {}
- },
- "21200202" : {}
- },
- "2213" : {}
- },
- "30" : {
- "3007" : {},
- "3009" : {},
- "3011" : {
- "200327188" : {}
- },
- "3030" : {}
- },
- "44" : {
- "100000305" : {},
- "629" : {}
- },
- "509" : {
- "100001205" : {},
- "50906" : {}
- },
- "7" : {
- "200001083" : {},
- "70806" : {}
- }
- }
- }
复制代码 ------------------ 2021-12-17 扩展 -----------------
假如源头数据不一定是按节点层级顺序排列呢?
也就是有可能 上级节点在子节点之后,- [ 211111, 200656001, "石膏像", 3 ],
- [ 21, 211111, "艺术用品", 2 ],
- [ 211111, 201330804, "智能取色笔", 3 ],
- [ 0, 21, "办公、文化及教育用品", 1 ],
- [ 21, 100003131, "美工工具", 2 ],
复制代码 以及节点的ID值不一定是按层级从小到大的,有些类目有可能因为创建的时间比较晚,ID值比某些子节点更大。
可以依靠的信息就是 数组末尾的层级信息,以及前两个ID的匹配关系 |