2014-01-18 2 views
2

저는 문자열의 벡터를 가지고 있지만 (실제로는 아무것도 될 수 있지만), 키가 일부 키워드 인지도 항목의 새로운 벡터를 만들고 싶습니다.Clojure에서 값의 벡터에 키를 추가합니다.

예를 들어

는 주어진 :

["foo" "bar" "baz"] 

내가

[{:message "foo"} {:message "bar"} {:message "baz"}] 

이 변환을 적용하는 가장 관용적 방법은 무엇을 얻을까요?

감사합니다.

답변

6

의견의 문제입니다. 몇 가지 옵션 :

(into [] (for [x ["foo" "bar" "baz"]] {:message x})) 

(mapv hash-map (repeat :message) ["foo" "bar" "baz"]) 

(mapv (partial assoc {} :message) ["foo" "bar" "baz"]) 

(reduce #(conj % {:message %2}) [] ["foo" "bar" "baz"]) 
+3

감사합니다. 나는 이것도 위로 만들었다 :'(지도 # (해시 -지도 : 메시지 %) [ "foo" "bar" "baz"])' – elSnape

1

A. Webb은 아주 좋은 옵션을 제공한다고 생각합니다.
나의 제안은 폭 넓은 관객 가독성을 위해 이동하는 것입니다 : 당신이 벡터가 필요하지 않은 경우도

(mapv (fn[x] {:message x}) ["foo" "bar" "baz"]) 

,

(map (fn[x] {:message x}) ["foo" "bar" "baz"]) 

은 더 많은 사람들이 읽을 수 있습니다.

+0

이 순수 아이러니입니까? (만약 그렇지 않다면, 더 많은 사람들에게 다가 가기 위해'x', 예를 들어'msg'보다 더 표현적인 매개 변수 이름을 사용하십시오). –

+0

중요한 것은 간단하게 유지하는 것입니다. 즉, 다른 이유가없는 한, 모든 클로저 프로그래머가 이해할 수있는 구조와 함수를 사용하십시오. 프로그램 코드는 쓰여진 것보다 더 자주 읽 힙니다. 아니요, 대부분의 프로그래머는 자연스럽게 그것을 머리 안에있는 단어로 소리내어 읽지 않고 기호로 읽으므로 x를 일반 함수 매개 변수로 사용하는 것이 아이러니하지 않습니다. 고등학생의 경우에도 "x의 기능"이라는 개념을 쉽게 인식해야합니다. – clojureman

+0

Clojure의 예제 자체에 따라 컬렉션의 매개 변수가 "coll"이되어서는 안됩니까? 많은 사람들 중 한 예를 들어 보자. (doc vec) – status203

관련 문제