web-dev-qa-db-ja.com

グルーヴィーなコレクションの交差点の反対

グルーヴィーなコレクションの交差の反対は何でしょうか?

21
Espen Schulstad

@Andreと@denisの両方の回答を組み合わせたいと思うでしょう

あなたが欲しいのはユニオンだと思いますそしてこれから交差点を引きます

def a = [1,2,3,4,5]
def b = [2,3,4]

assert [1,5] == ( a + b ) - a.intersect( b )

デニスによって与えられた解決策はあなたがするかどうかに依存します

def opposite = leftCollection-rightCollection // [1,5]

または

def opposite = rightCollection-leftCollection // []

私はあなたが望んでいたとは思わない

28
tim_yates

「結合の反対」が何を意味するのかはわかりませんが、対称差(別名集合差または論理和)を意味していると思います。この操作の結果は、以下の赤で示されています。

enter image description here

2つのJava/Groovyコレクションでこの操作を実行する最も簡単な方法は、Apache commonsコレクションが提供する disjunction メソッドを使用することです。

6
Dónal

これでしょうか?

def leftCollection = [1,2,3,4,5]
def rightCollection = [2,3,4]
def opposite = leftCollection-rightCollection
println opposite

プリント

[1,5]
4
denis.solonenko

交差点に交差を使用する

assert [4,5] == [1,2,3,4,5].intersect([4,5,6,7,8])

ユニオンには+を使用します。

assert [1,2,3,4,5] == [1,2,3] + [4,5]

http://groovy.codehaus.org/groovy-jdk/Java/util/Collection.html を参照してください。

3
(a-b)+(b-a)
// (a-b) return [1,5]
//(b-a) return []
// TOTAL = [1,5]+[]

これは私たちが持っているときです:a=[1,2,3,4,5],b=[2,3,4,5]

OOP:

Java.util.List.metaClass.oppIntersect={b->
  return ((delegate-b)+(b-delegate))
}

その後

a.oppIntersect(b)

終わり!

0
Abdennour TOUMI