2017-05-31 53 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])))