Clojure 使用传感器的机会?

Clojure 使用传感器的机会?,clojure,transducer,Clojure,Transducer,使用Clojure,我从SQLite数据库中提取一些数据。它将以地图列表的形式到达。下面是数据的一个简短示例 ( {:department-id 1 :employee-firstname "Fred" :employee-lastname "Bloggs"} {:department-id 1 :employee-firstname "Joe" :employee-lastname "Bloggs"} {:department-id 2 :employee-fir

使用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中就是这么做的

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


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

我会试一试的,但和我们许多人一样,我也在为这件事绞尽脑汁

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

例如,如果你有

(->> (地图……) (过滤器…) (地图) (地图)

这些函数是按顺序运行的,每个函数之后都会创建新的集合,以提供给下一个函数。然而,有了传感器,你最终会得到这样的结果

(->> (地图…) (地图) (过滤器…) (地图…)

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


对你来说,我不确定这是否有用。这部分是因为我不知道您正在应用哪些其他转换,但主要是因为您需要的是一个状态跟踪级别,即员工数据的分组。这是可能的,但我相信这会让事情变得更难

我不认为传感器在这里真的会有帮助,但是
groupby
实际上是独立完成整个转换的。谢谢你的回复,我知道groupby在这里有帮助。在我的问题中,我暗示我可以编写可以“重塑”数据的代码。事实上,我在重塑过程中的一个步骤中使用了GROUPBY——我确实获得了我想要的形状的数据。不过有趣的是,为什么传感器不更适合这里?我承认我正在努力真正理解传感器。哦,当然,我可以学习使用简单示例的教程。但当它涉及到像上面这样的现实世界的东西时——我不知道该注意些什么——嘿!你应该在这里使用传感器。有什么建议吗?谢谢蒂姆。同样,我知道传感器的理论,并且没有创建中间集合。此外,您可以忽略任何“其他转换”。正如我前面提到的,我已经编写了一些转换来“重塑”数据,但是您可以完全忽略这一点。我想知道使用传感器是否/如何实现这一点,但你一针见血,这里增加的困难是状态。有“有状态”的传感器,我想这是需要的。我想我需要更多的学习。好的,那么你可能会发现这个博客项目很有用