嗨,
我正在学习更多关于传感器的内容,但遇到了一些瓶颈。
我想了解的是,它们是否适用于我的使用场景(包括作为一个学习练习),以及我所做的操作是否正确/高效/也许有更好的方法 :-)
比如说,我有一个这样的数据结构
(def trip {:tripData
{:segments [{:dataPoints
[{:location {:lat 1 :lng 2}}
{:location {:lat 3 :lng 4}}]}]}})
可能有数百/数千个数据点,每个数据点只有一个位置。
我想有效地提取出纬度和经度到一个单独的集合中,并将其转换成字符串。我提出了这个方案
(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的一部分,因为关键字不是传感器。
我不知道如何使这种方法更有效/更好,同时学习如何使用传感器。
我将非常感谢任何帮助/指导/反馈!
谢谢。