2

使用 Clojure,我从 SQLite 数据库中提取了一些数据。它将以地图列表的形式到达。这是数据外观的简短示例。

(
     {:department-id 1 :employee-firstname "Fred" :employee-lastname "Bloggs"}
     {:department-id 1 :employee-firstname "Joe" :employee-lastname "Bloggs"}
     {:department-id 2 :employee-firstname "John" :employee-lastname "Doe"}
      ...
)

我想把它改造成这样的东西:

(
 {:department-id 1 :employees [{:employee-firstname "Joe" :employee-lastname "Bloggs"} {:employee-firstname "Fred" :employee-lastname "Bloggs"}]}
 {:department-id 2 :employees [{:employee-firstname "John" :employee-lastname "Doe"}]
 ... 
)

我知道我可以编写一个函数来处理部门和员工,然后将它们“粘合”在一起以实现我想要的形状。事实上,我在 REPL 中就是这样做的。

但我最近听说了一些关于换能器的事情,想知道这是一个使用换能器的机会。

如果是,代码会是什么样子?

4

1 回答 1

1

我会试一试,但和我们中的许多人一样,我仍然在纠结这个问题。

从我对传感器的阅读来看,真正的好处似乎是避免了创建中间集合的需要,从而提高了效率。这意味着要回答您的问题,您确实需要查看您的代码将做什么以及它的结构。

例如,如果你有类似的东西

(->> (map ....) (过滤器 ..) (map ..) (map ..))

这些函数按顺序运行,每个函数之后都会创建新的集合以供下一个。但是,对于换能器,您最终会得到类似的东西

(->> (map ...) (map ..) (filter ..) (map ...))

其中应用于数据的函数以管道方式应用于原始集合中的每个项目,您无需生成中间集合。

在你的情况下,我不确定它会有所帮助。这部分是因为我不知道您正在应用哪些其他转换,但主要是因为您想要的需要一定程度的状态跟踪,即员工数据的分组。这是可能的,但我相信这会让事情变得更加困难。

于 2015-02-13T01:34:52.050 回答