2013-01-08 2 views
1

내가 두 세트를 가지고 두 번째에 결석 첫 번째의 요소가 포함됩니다 세번째 작성해야합니다두 세트를 분리하는 방법?

(? #{"a" "b" "c"} #{"b"}) ; -> ["a" "c"] 

내가 약 disj 알을하지만 경우에만 두 번째 인수를 작동 집합이 아니라 요소입니다. 두 세트가있는 경우

+1

다른 세트가 아닌 세트에서 모든 항목을 제거하려면 다음을 수행 할 수 있습니다. '(reduce disj # {1 2 3} [3 4 5])' – Alex

답변

7

, 당신은 set difference 사용할 수 있습니다

user=> (require 'clojure.set) 
user=> (difference #{"a" "b" "c"} #{"b"}) 
#{"a" "c"} 
2

차이 기능이 아니었다면, 당신은 감소로 쉽게 만들었습니다 수 있습니다

=> (reduce disj #{"a" "b" "c" "d"} #{"b" "d"}) 
#{"a" "c"} 

이 감소가 소요 함수, 초기 '누산기'및 누적기를 수정하기 위해 매핑하는 콜렉션이 있습니다. 이 경우 첫 번째 세트를 누적기로 사용하고 두 번째 세트의 첫 번째 항목을 다음 항목에서 제거한 다음 다른 항목을 제거합니다.

+0

일반적인 경우에 차이점이 어떻게 구현되는지 생각합니다. 이것에 대한 좋은 점은 컬렉션 (list, vector, seq 등)으로 두 번째 세트를 대체 할 수 있다는 것입니다. 여전히 작동합니다. – Alex

+0

미안 알렉스, OP에 댓글에 정확히 같은 해결책을 게시했는지 알지 못했습니다. – NielsK

+0

걱정하지 마라. 나는 정당한 게임이라고 생각할 정도로 대답으로 쓰는 것을 꺼려하지 않았다. :) – Alex

관련 문제