嗨,
我正在学习更多关于转换单元的知识,但遇到了一些 deadends。
我想了解的是,是否适合在我的使用案例中使用(包括作为学习练习),以及我所做的是否正确/高效/可能还有更好的方法 :-)
假设我有一个这样的数据结构
(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,最终得到了相同的结果。
然而,我的理解是不能在 comp 使用 map 关键字(即,:tripData, :segments)作为部分,因为关键字不是转换单元。
我在如何使这更高效/更好以及如何使用转换单元方面陷入了困境。
我将非常感谢一些帮助/指导/反馈!
谢谢。