你好,
我在学习变压器,但遇到了一些障碍。
我想了解的是,它们是否适合使用(在我的用例中,但也是一个学习练习),我做的是否正确/高效/也许有更好的方法 :-)
比如说,我有一个这样子的数据结构
(def trip {:tripData
{:segments [{:dataPoints
[{:location {:lat 1 :lng 2}}
{:location {:lat 3 :lng 4}}]}]}})
可能会有数百/数千个数据点,每个数据点都有一个单独的位置。
我想有效地提取出lat和lng到一个单独的集合中,并将其转换为字符串。我提出了以下方法
(def xf
(comp
(mapcat :dataPoints)
(map :location)
(map (fn [{lat :lat lng :lng}] (str lat " " lng)))))
然后通过
(def lat-lng (into [] xf (->> trip :tripData :segments)))
我得到了类似这样的东西
["1 2" "3 4"]
然后(为了进行我的练习),进行以下操作
(clojure.string/join ", " lat-lng)
最终获得这个
"1 2, 3 4"
这都没问题 :-)
然而,鉴于我对变压器的理解不深,我开始想是否有不同的/更好的方法。例如,在某些情况下,在comp xf中,将数据转换为字符串并在最后进行连接,而不是使用clojure.string/join。
我还发现,即使不使用变压器,也可以这样做
(def lat-lng-2 (->> trip
:tripData
:segments
(mapcat :dataPoints)
(map :location)
(map (fn [{lat :lat lng :lng}] (str lat " " lng)))))
通过使用clojure.string/join,最终得到了相同的结果。
然而,我的理解是,你不能将一个map关键字(例如,:tripData, :segments)作为comp的一部分使用,因为关键字不是变压器。
我在如何提高效率和改进这一过程以及如何使用变压器方面一筹莫展。
我将非常感激一些帮助/指导/反馈!
谢谢。