지도에서 값으로 Clojure 벡터를 채우려고합니다. 지도에 필요한 값을 저장하는 특정 키의 벡터가 있습니다. key-vec를 반복하고지도에서 값을 가져 와서 다른 벡터에 저장해야합니다.Clojure 벡터 채우기
내가 루프 + RECUR 사용하여 시도했다 :
(let [keys-vec (:keys-vec item)
my-map (:my-map item)]
(loop [newV []
i 0]
(if (< i (count keys-vec))
(recur
(conj newV (get my-map (get keys-vec i)))
(inc i))
newV)))
을 그리고 그것은했다. 하지만 Clojure는 최소한의/효과적인 코드 작성 스타일로 잘 알려져 있으며 더 좋은 방법이 있는지 알고 싶었습니다.
아이디어가 있으십니까?
달성하고자하는 목표는 무엇입니까? '(def new-vector existing-vector) '가 문제를 해결하지 않습니까? – superkonduktr
나는 Clojure의 컬렉션이 불변하고 영구하기 때문에 'loop'와 요소의 인덱스를 사용하여 벡터를 반복하는 것은 Clojure의 안티 패턴에 가깝다고 생각한다. 대신, 감소 함수를 사용하는 것이 좋습니다. 작업을 수행하는 관용적 방법은 간단히'(vals (select-keys my-map keys-vec))'입니다. – superkonduktr
당신 말이 맞습니다. 감사! –