생성일: 2019년 12월 04일
수정일: 2023년 08월 02일

4clojure - Map Construction (61)

  1. 문제
  2. 풀이
    1. 풀이 과정

문제

(= (__ [: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}
Tags: 4clojure Today I Learn