2016-09-18 5 views
1

나는 같은 것을 할 수 있습니다동등성을 확인하여 벡터에서 레코드를 제거하는 방법은 무엇입니까? 자바에서

myList.add(myObj); 

다음이가 equals 방법을 사용하고 동등성에 대한 myList의 각 요소를 확인하여 작동이

myList.remove(myObj); 

처럼 제거합니다.

(def myvec [myrecord]) 

하지만이 같은 remove 사용 myvec에서 myrecord를 제거 할 수 없습니다 : Clojure의에서

나는이 작업을 수행 할 수 있습니다

ClassCastException myproj.Task cannot be cast to clojure.lang.IFn clojure.core/complement/fn--4611 (core.clj:1392) 
: 나는 오류가 발생하기 때문에

(remove myrecord myvec) 

비슷한 방법으로 벡터에서 레코드를 제거하려면 어떻게해야합니까? o 자바 메소드?

답변

4

Remove는 컬렉션의 모든 항목에 대해 실행되는 함수가 필요하며 함수가 false 값을 반환 한 항목 만 유지합니다. 귀하의 경우에는 오류 메시지가 귀하의 개체가 기능이 아니라는 것을 알려줌으로써 올바른 것입니다.

개체에 equals을 사용하는 함수를 명시 적으로 작성하거나 제거 할 개체를 집합에 추가 할 수 있습니다. 집합은 입력이 집합의 구성원 일 때 참값을 반환하는 함수로 작동합니다.

(remove #{myrecord} myvec) 

구체 예

(remove #{4 3} [1 2 3 4]) 
;=> (1 2) 
+0

"입력은 해당 세트의 멤버 인 truthy 값을 반환하는 함수 세트 작용한다." 올바르지 않습니다. 예를 들어'# {nil false} '. –

+0

"false sets"이외의 모든 집합에 대해 :) nice 1 Sam – Shlomi

+0

이 경우,'myrecord'가 false가 아니기 때문에, 집합이 정상적으로 작동해야합니다. –

관련 문제