有机会使用换能器吗?

时间:2015-02-11 19:29:19

标签: clojure transducer

使用Clojure,我将一些数据从SQLite DB中提取出来。它将以地图列表的形式到达。以下是数据外观的缩写示例。

(
     {: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"}]
 ... 
)

我知道我可以编写一个功能,处理部门,然后是员工和#34;粘合"他们回到一起,以达到我想要的形状。事实上,我在REPL中做到了这一点。

但我最近听说过有关传感器的一些信息,并且想知道这是一个使用传感器的机会。

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

1 个答案:

答案 0 :(得分:1)

我有一个去,但像我们许多人一样,我仍然围绕着这个。

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

例如,如果您有类似

的内容

( - >>   (地图......)   (过滤..)   (地图..)   (地图..))

正在按顺序运行这些函数,并在每个集合之后创建新集合以进入下一个集合。但是,对于传感器,您最终会得到像

这样的东西

( - >>   (地图......)   (地图..)   (过滤..)   (地图......))

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

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