티스토리 뷰

Clojure

[Clojure] 클로저의 자료구조3 (맵)

박중수 2015. 11. 24. 15:50


맵의 정의는 아래와 같이 한다


{:key1 "value1", :key2 "value2}



각 요소마다는 쉼표로 구분하고, 키와 값 구분은 띄어쓰기로 한다.


키 이름 앞의 콜론(:)은 키워드라는 뜻이다.

키워드는 자기 자신을 가르키는데에 사용한다.


각 함수를 사용하기 위해 변수에 Map을 할당하겠다.


(def exMap {:key1 "val1", :key2 "val2", :key3 "val3"})


키로 값을 가져오는 방법은 변수명에 키명을 전달해주면 된다.


(exMap :key1)


결과로 "val1"이 출력된다.



방금처럼 변수명을 함수로 사용하는 것과 반대로 키를 함수로 사용할 수도 있다.


(:key1 exMap)


결과로 똑같은 "val1"이 출력된다.



또한 두 개의 맵을 합칠 때에는 merge 함수를 이용한다.


(def map1 {:key1 10, :key2 20})

(def map2 {:key3 30, :key4 40})

(merge map1 map2)


결과로 두 맵을 합친 결과인 {:key1 10, :key2 20, :key3 30, :key4 40}  가 출력된다.



또한 merge-with이라는 함수도 있는데 merge할 때 키 값이 겹치면 결합을 위한 해결방법을 지정해 줄 수 있다.


(def map1 {:key1 10, :key2 20})

(def map2 {:key2 30, :key3 40})


위의 변수를 보면 :key2가 중복되기에 결합할 때 값을 어찌할 지 애매해진다.

그 해결방법을 두 값을 합치는 것으로 지정해보겠다


(merge-with + map1 map2)


+를 인자로 넘겨줌으로써 키 값이 겹치면 더하도록 지정했다.

결과로는 {:key1 10, :key2 50, :key3 40} 이 출력된다.


겹치는 키인 :key2의 각각의 값인 20과 30이 더해져 50이 출력됬다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함