我是Clojure领域的新手,但我遇到了问题。我有一个看起来像这样的LazySeq(实际上更长)
values = (("Brand1" "0") ("Brand2" "15") ("Brand3" "12"))
我也定义field
为
fields = [:Brand :Sale]
我想至少要有
({:Brand "Brand1 :Sale "0"} {:Brand "Brand2 :Sale "15"} {:Brand "Brand3 :Sale "12"})
我尝试了几种方法(应用,交织,减少,合并和组合),但是每次都会得到意想不到的结果。
那可能吗 ?谢谢
好吧,您是对的:您必须interleave
先将它们全部添加到地图中。但是您应该为中的每个集合执行此操作values
。这意味着您需要使用map
:
(let [values '(("Brand1" "0") ("Brand2" "15") ("Brand3" "12"))
fields [:Brand :Sale]]
(map #(apply hash-map (interleave fields %)) values))
输出:
({:Sale "0", :Brand "Brand1"}
{:Sale "15", :Brand "Brand2"}
{:Sale "12", :Brand "Brand3"})
另一个变体是这样做的:
(let [values '(("Brand1" "0") ("Brand2" "15") ("Brand3" "12"))
fields [:Brand :Sale]]
(map #(into {} (map vector fields %)) values))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句