簡體   English   中英

Clojure,將集合轉換為地圖

[英]Clojure, transform collection to map

我想知道迭代多個集合以創建Clojure地圖的最佳方法是什么。 實際上我有3個收藏:

("Aujourd'hui" "Demain" "25.11" "26.11" "27.11" "28.11" "29.11") 
("2 °C" "2 °C" "1 °C" "0 °C" "-3 °C" "-4 °C" "0 °C") 
("8 °C" "6 °C" "4 °C" "2 °C" "1 °C" "1 °C" "5 °C")

我喜歡創建一個看起來像這樣的地圖集合:

{:date Aujourd'hui :temp-min 2°C :temp-max 8°C}{...}

並且知道應該沒有那么困難,但是我不知道該怎么做。

謝謝你的幫助 !

我們可以使用map為集合的每個索引構造一個hash-map。 如果提供了兩個以上的參數,則map將並行移動所有集合。

user> (let [dates '("Aujourd'hui" "Demain" "25.11" "26.11" "27.11" "28.11" "29.11") 
            mins '("2 °C" "2 °C" "1 °C" "0 °C" "-3 °C" "-4 °C" "0 °C") 
            maxes '("8 °C" "6 °C" "4 °C" "2 °C" "1 °C" "1 °C" "5 °C")]
        (pprint (map #(hash-map :date %1 :temp-min %2 :temp-max %3) dates mins maxes)))
({:date "Aujourd'hui", :temp-max "8 °C", :temp-min "2 °C"}
 {:date "Demain", :temp-max "6 °C", :temp-min "2 °C"}
 {:date "25.11", :temp-max "4 °C", :temp-min "1 °C"}
 {:date "26.11", :temp-max "2 °C", :temp-min "0 °C"}
 {:date "27.11", :temp-max "1 °C", :temp-min "-3 °C"}
 {:date "28.11", :temp-max "1 °C", :temp-min "-4 °C"}
 {:date "29.11", :temp-max "5 °C", :temp-min "0 °C"})

下面的函數構造一個表作為從列標題記錄序列titles和序列columns

(defn build-table [titles columns]
  (apply map (fn [& xs] (zipmap titles xs)) columns))

:titles應該與columns

例如,

(build-table [:date :temp-min :temp-max] data)

哪里

(def data ['("Aujourd'hui" "Demain" "25.11" "26.11" "27.11" "28.11" "29.11") 
           '("2 °C" "2 °C" "1 °C" "0 °C" "-3 °C" "-4 °C" "0 °C")
           '("8 °C" "6 °C" "4 °C" "2 °C" "1 °C" "1 °C" "5 °C")])

...產生

 ({:temp-max "8 °C", :temp-min "2 °C", :date "Aujourd'hui"}
  {:temp-max "6 °C", :temp-min "2 °C", :date "Demain"}
  {:temp-max "4 °C", :temp-min "1 °C", :date "25.11"}
  {:temp-max "2 °C", :temp-min "0 °C", :date "26.11"}
  {:temp-max "1 °C", :temp-min "-3 °C", :date "27.11"}
  {:temp-max "1 °C", :temp-min "-4 °C", :date "28.11"}
  {:temp-max "5 °C", :temp-min "0 °C", :date "29.11"})

這會將所有數據元素保留為字符串。 將它們轉換為數字(最好是附加單位)可以獨立解決。 如所寫,例如2°C無效的Clojure。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM