【发布时间】:2017-03-02 03:12:39
【问题描述】:
假设我们有一个包含在文件 Array.json 中的一维 javascript 对象数组,其密钥架构未知,即在读取文件之前不知道密钥。
然后我们希望输出一个带有标题或第一个条目的 CSV 文件,它是来自所有对象的一组以逗号分隔的键。
文件的每一行都应包含逗号分隔的值,这些值对应于文件中的每个键。
数组.json
[
abc:123,
xy:"yz",
s12:13,
],
...
[
abc:1
s:133,
]
一个有效的输出:
abc,xy,s12,s
123,yz,13,
1,,,133
我正在自学“函数式”编程,但我认为这个问题不适用于函数式解决方案。 我相信这个问题需要为输出标头保留一些状态,并且随后每一行都依赖于该标头。
我希望一次性解决问题。我的目标是大型数据集的效率、最少的遍历,以及如果可能的话,可并行性。如果这不可能,那么您能否提供证据或理由来解释原因?
编辑:有没有办法在功能上解决这样的问题?:
假设您以某种特定的顺序通过数组一次。然后 从一开始,第一个标题集看起来像
abc,xy,s12目的。带有 CSV 条目123,yz,13。然后在下一个对象上添加一个 标题集的附加键,因此abc,xy,s12,s将是标题 CSV 条目将是1,,,133。最后我们不需要 第二次通过数据集。我们可以追加额外的 结果集的逗号。这是我们可以接近单一的一种方式 通过....
是否有旨在解决此类问题的功能性工具(functions),我应该考虑什么? [我所说的功能工具是指 Monads、FlatMap、Filters 等]。 或者,我应该考虑 Futures 之类的东西吗?
目前我一直在尝试使用 Java8 来解决这个问题,但我对 Scala 等的解决方案持开放态度。理想情况下,我能够确定 Java8s 的函数式方法是否可以解决问题,因为这是我目前正在使用的语言在。
【问题讨论】:
-
什么是
Array.json。这是斯卡拉吗?而且...functional approach与否只是编写解决方案的一种方法。functional tools是什么意思? -
那是输入源。我会尝试清理它。
-
我会尽量更清楚地了解功能性工具。
-
不能一次完成。考虑:输入的最后一行可能会改变输出的第一行(因为它可能会添加一个尚未见过的键)。因此,您必须在检查输入时收集 something,然后在最后检查并输出键列表,然后是值列表。两遍
-
你如何写出结果而不通过它?这完全等同于对密钥的另一次传递,并且您为此拒绝了几个答案。
标签: scala functional-programming java-8 java-stream