clojure convert lazy-seq to hash map

20,695

Solution 1

To answer your actual question:

(apply hash-map record)

But since you actually already have separate keys and values, I would suggest skipping the interleave step and instead writing

(zipmap fields values)

Or if you have your heart set on into, you could

(into {} (map vector fields values))

Solution 2

This isn't sensible at all, but since the original question wanted to use into with record:

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

Share:
20,695
Rob Buhler
Author by

Rob Buhler

Updated on February 07, 2021

Comments

  • Rob Buhler
    Rob Buhler over 3 years

    I'm a clojure beginner. How do I create a map from a lazySeq?

    (def fields [:name :age :color])
    (def values ["joe" 32 "red"])
    (def record (interleave fields values))
    
    (def mymap (into {} record))  ;; ????
    
    ;; (get mymap :age)
    ;; 32
    
  • Reb.Cabin
    Reb.Cabin over 7 years
    In what way is this alternative not sensible (not a rhetorical question, a genuine question)? Is it because it's longer and / or more elaborate than the other alternatives, i.e., it's "beating around the bush??
  • amalloy
    amalloy over 7 years
    It also silently drops a value instead of throwing an exception, if record unexpectedly has an odd number of elements. Although on reflection, I suppose the solutions that make use of the separate key and value sequences have a similar issue.