2011-12-01 22 views
6

Aynı ürünü içeren iki diziyi nasıl karşılaştırabilirim? Aynı ürünü içeren iki diziyi nasıl karşılaştırabilirim?

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

bir & b

aynı öğeleri içerir, ancak bir & değil c.

+0

Bunlar listeler, diziler değil ... Ne demek istiyorsun? –

+0

dizinin üstündeki – nikli

+4

@nikli dizileridir, liste değildir –

cevap

13

Kümelere dönüştürmeyi ve ardından bunları karşılaştırmayı deneyebilirsiniz, çünkü Kümelerdeki eşitlik, siparişe bakılmaksızın aynı öğelere sahip olarak tanımlanmıştır.

assert a as Set == b as Set 
assert a as Set != c as Set 
+9

Liste öğeleri çoğaltılmadığı sürece çalışır. Yinelenebilecek listeler için, bu yöntem, her bir ayrı öğeye aynı sayıda sahip olup olmadıklarını algılamaz. (Bu, OP'nin umursadığı bir şey olduğu izlenimini alamıyorum, böylece cevabınız hala geçerli, sadece bu cevabı bulanlar için bir FYI). –

8

Basitçe sonuçları sıralama ve karşılaştırma listeleriniz çok büyük değilse, kolay bir yoludur:

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

def haveSameContent(a1, a2) { 
    a1.sort(false) == a2.sort(false) 
} 

assert haveSameContent(a, b) == true 
assert haveSameContent(a, c) == false 

sort geçirilen false yerinde yeniden sıralama önlemektir. Listelerin sırasını değiştirmek tamam değilse, kaldırabilir ve muhtemelen biraz performans kazanabilirsiniz.

+0

Boolean değerini "true" veya "false" ile karşılaştırmanın bir anlamı yoktur. BenceSanContent (a, b) ve assert! HaveSameContent (a, c) 'yi daha iyi okur. – epidemian

+0

Bu gerçekten bir fikir meselesi. Ben yanlış bir çıkış beklediğiniz '== false' ile daha net hale getirdiğini düşünüyorum. Kodu gözden geçirirken tek bir ünlem işareti kaçırmak oldukça kolay. (Ayrıca, Unutmayın, Groovy hakikatten dolayı, '! 0' veya'! [] '' True' döndürür, fakat 'assert [] == false' başarısız olur.) – OverZealous

+0

Ben test ettim, ama doğru değil – nikli

İlgili konular