생성일: 2019년 12월 04일
수정일: 2023년 08월 02일
수정일: 2023년 08월 02일
4clojure - Map Construction (61)
문제
(= (__ [:a :b :c] [1 2 3]) {:a 1, :b 2, :c 3})
(= (__ [1 2 3 4] ["one" "two" "three"]) {1 "one", 2 "two", 3 "three"})
(= (__ [:foo :bar] ["foo" "bar" "baz"]) {:foo "foo", :bar "bar"})
제한 : zipmap
풀이
(fn [x y]
(apply array-map (vec (mapcat list x y))))
풀이 과정
vec를 빼고도 답이 가능 할 것 같다.
(fn [x y]
(apply array-map (mapcat list x y)))
;; array-map 대신 hash-map
(fn [x y]
(apply hash-map (mapcat list x y)))
mapcat list는 항상 사용하던 함수지만 어떤 식으로 계산이 되는지 적어둘 필요성은 있다.
(mapcat list [:a :b :c] [1 2 3])
;; (:a 1 :b 2 :c 3)
;; apply를 사용하면 이런 식으로 사용 된다.
(apply hash-map '(:a 1 :b 2 :c 3))
;; (hash-map :a 1 :b 2 :c 3)
다른 답들도 있었다.
#(into {} (map vector % %2))
;; 위 답에 대한 해결되는 과정
(map vector [:a :b :c] [1 2 3])
;; ([:a 1] [:b 2] [:c 3])
(into {} '([:a 1] [:b 2] [:c 3]))
;; {:a 1, :b 2, :c 3}