对所有序列项调用函数

时间:2017-05-31 09:45:27

标签: dictionary clojure

我正在尝试在Clojure中生成嵌套映射。 问题是。

  • 首先我有一个序列(“第一个”“第二个”“第三个”......)。
  • 其次我有一个函数,通过调用每个带有序列的元素,我想要接收一个这样的地图{:first(function first)},{:second(function second)}和.....。
  • 最后,我希望将所有结果发送到新地图{:first {...}:second {...}:third {...}}。

也许有人给我一些指导或接近如何做到这一点。

P.S

所以我创建了我的函数的草稿(它不起作用)。

(defn finder [sequence function]
 (for [x [sequence]
      :let [ pair {:x (function x)}
             mappa {} (assoc-in mappa pair)]]
    mappa))

4 个答案:

答案 0 :(得分:6)

这是使用juxt

的好机会
(defn finder [sequence function]
  (into {} (map (juxt keyword function) sequence)))

答案 1 :(得分:3)

您可以使用map构建键值对,使用into构建结果的hashmap:

(defn finder [sequence function]
  (into {} (map (fn [k] [(keyword k) (function k)]) sequence)))

答案 2 :(得分:1)

您可以使用keywordinto等功能:

(defn finder [sequence function]
  (->> sequence
    (map #(vector (keyword %) (function %)))
    (into {})))

答案 3 :(得分:1)

你可以在两个函数应用程序序列上进行zipmap,因为关键字也只是一个函数。

(defn finder [sequence function]
  (apply zipmap (map #(map % sequence) [keyword function])))
相关问题