用标签和表格的矢量创建地图

时间:2015-01-28 16:10:46

标签: clojure zipmap

我想用这段代码编写一个通用版本

(fn[item] 
 {:tag1 ($x:text "./tag1" item) 
  :tag2 ($x:text "./tag2" item)})

我正在考虑使用zipmap,因为我使用了一个标签矢量,就像这样

[:tag1 :tag2],

但不知道如何制作表格的通用版本

($x:text "./tag1" item)

来自矢量的任何给定项目。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这可以通过zipmap使用相同的集合两次来实现:

(fn [item]
  (let [tags [:tag1 :tag2]]
    (zipmap tags
            (map (fn [tag]
                   ($x:text (str "./" (name tag)) item))
                 tags))))

但我认为使用into实际上更清楚:

(fn [item]
  (into {}
        (map (fn [tag]
               [tag ($x:text (str "./" (name tag)) item)])
             [:tag1 :tag2])))