40 votes

clojure convertir lazy-seq en hash map

Je suis un débutant en clojure. Comment créer une carte à partir d'un paresseux ?

(def fields [:name :age :color])
(def values ["joe" 32 "red"])
(def record (interleave fields values))

(def mymap (into {} record))  ;; ????

;; (get mymap :age)
;; 32

89voto

amalloy Points 29125

Pour répondre à votre question :

(apply hash-map record)

Mais comme vous avez déjà des clés et des valeurs séparées, je suggère de sauter l'étape d'entrelacement et d'écrire à la place

(zipmap fields values)

Ou si vous avez le cœur fixé à into, vous pourriez

(into {} (map vector fields values))

3voto

PaulaG Points 336

Ce n'est pas du tout raisonnable, mais puisque la question initiale voulait utiliser into avec record :

(into {} (map vec (partition 2 record)))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X