728x90
집합은 유일한 값들의 컬렉션이다. 요소의 중복이 없는 컬렉션을 만들 때 유용하다.
집합은 #{} 로 둘러싼다.
집합을 생성할 때는 당연히 중복은 허용되지 않는다.
1 2 3 4 5 6 7 | user=> #{:red :blue :white :pink} #{:white :red :blue :pink} user=> #{:red :blue :white :pink :pink} IllegalArgumentException Duplicate key: :pink clojure.lang.PersistentHashSet.createWithCheck (PersistentHashSet.java:68) | cs |
union, difference, intersection 과 집합연산이 가능하다.
집합연산을 하기 위해서는 그 함수 앞에 clojure.set 을 붙여주어야 한다.
union
1 2 3 4 5 | user=> (clojure.set/union #{:r :b :w} #{:w :p :y}) #{:y :r :w :b :p} user=> | cs |
difference
1 2 3 4 5 | user=> (clojure.set/difference #{:r :b :w} #{:w :p :y}) #{:r :b} user=> | cs |
intersection
1 2 3 4 5 | user=> (clojure.set/intersection #{:r :b :w} #{:w :p :y}) #{:w} user=> | cs |
set 함수를 이용해 다른 종류의 컬렉션을 집합으로 바꿀 수 있다.
집합은 키와 값이 같은 맵이라고 보면 된다.
1 2 3 4 5 6 7 8 9 | user=> (set [:rabbit :rabbit :watch :door]) #{:door :watch :rabbit} user=> user=> (set {:a 1 :b 2 :c 3}) #{[:c 3] [:b 2] [:a 1]} user=> | cs |
집합에서 요소를 갖고 올려면 get 함수를 이용하면 된다.
1 2 3 4 5 6 7 | user=> (get #{:rabbit :door :watch} :rabbit) :rabbit user=> (get #{:rabbit :door :watch} :jar) nil user=> | cs |
키워드로 직접 접근할 수도 있다.
1 2 3 4 5 | user=> (:rabbit #{:rabbit :door :watch}) :rabbit user=> | cs |
집합 자체를 함수로 사용하여 같은 일을 할 수 있다.
1 2 3 4 5 | user=> (#{:rabbit :door :watch} :rabbit) :rabbit user=> | cs |
집합에 포함된 요소를 확인하기 위한 다른 방법으로 contains? 가 있다.
1 2 3 4 5 6 7 | user=> (contains? #{:rabbit :door :watch} :rabbit) true user=> (contains? #{:rabbit :door :watch} :jam) false user=> | cs |
집합 자체를 함수로 사용하는 경우 집합에 nil 이 포함되어 있을 때는 contains? 를 사용하면 된다.
1 2 3 4 5 6 7 | user=> (#{:rabbit nil} nil) nil user=> (contains? #{:rabbit nil} nil) true user=> | cs |
집합에 요소를 추가하기 위해 conj 를 사용한다.
1 2 3 4 5 | user=> (conj #{:rabbit :door} :jam) #{:door :rabbit :jam} user=> | cs |
disj 함수는 요소를 제거할 때 사용한다.
1 2 3 4 5 | user=> (disj #{:rabbit :door} :door) #{:rabbit} user=> | cs |
728x90
'프로그래밍 Programming' 카테고리의 다른 글
클로저 08. 심볼과 바인딩 - def, var, let (0) | 2018.08.17 |
---|---|
클로저 07. 데이터 컬렉션 - 리스트가 핵심 (0) | 2018.08.17 |
클로저 05. 데이터 컬렉션 - 맵 (0) | 2018.08.17 |
클로저 04. 데이터 컬렉션 - 컬렉션의 공통점 (0) | 2018.08.17 |
클로저 03. 데이터 컬렉션 - 벡터 (0) | 2018.08.17 |