简体   繁体   中英

Convert vector of strings into hash-map in Clojure

I have the following data structure:

["a 1" "b 2" "c 3"]

How can I transform that into a hash-map?

I want the following data structure:

{:a 1:b 2:c 3}

and one more:)

(->> ["a 1" "b 2" "c 3"]
     (clojure.pprint/cl-format nil "{~{:~a ~}}")
     clojure.edn/read-string)

;;=> {:a 1, :b 2, :c 3}

Use clojure.string/split and then use keyword and Integer/parseInt :

(->> ["a 1" "b 2" "c 3"]
     (map #(clojure.string/split % #" "))
     (map (fn [[k v]] [(keyword k) (Integer/parseInt v)]))
     (into {}))
=> {:a 1, :b 2, :c 3}
(into {} (map #(clojure.edn/read-string (str "[:" % "]"))) ["a 1" "b 2" "c 3"]) ;; => {:a 1, :b 2, :c 3}
(def x ["a 1" "b 2" "c 3"])
(clojure.edn/read-string (str "{:" (clojure.string/join " :" x) "}"))
;;=> {:a 1, :b 2, :c 3}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM