2017-05-31 59 views
2

的所有项目我试图生成Clojure中嵌套的地图。 问题在于。调用函数序列

  • 首先,我有一个序列(“第一”“第二”“第三”...)。
  • 其次我通过调用其与序列中的每个元素我想接收地图这样有一个函数{:第一(功能 第一个)},{:第二(第二功能)}和.....。
  • 最后,我想所有的结果GETHER到一个新的地图{:第一{...}:第二{...}:第三{...}}。

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

p.s

因此,我创建了我的函数草案(它不起作用)。

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

你想让地图成为'{:first {:first(f“first”)}:second {:second(f“second)} ...}'或者只是'{:first( F “第一”):第二(F “第二”)...}' – Lee

+0

我想要得到的地图像这样{:第一(F “第一”):第二(F “第二”)...} –

回答

3

您可以使用map构建键值对和into构造所产生的散列映射:

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

谢谢你非常想提醒! –

1

你可以像keywordinto功能:

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

这是一个漂亮的场合使用juxt

(defn finder [sequence function] 
    (into {} (map (juxt keyword function) sequence))) 
+0

嘿嘿,我喜欢这个比我的解决方案更好! –

1

可以zipmap超过两个功能的应用顺序,因为关键字仅仅是一个函数了。

(defn finder [sequence function] 
    (apply zipmap (map #(map % sequence) [keyword function])))