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.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.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
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). –
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.
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
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
Ben test ettim, ama doğru değil – nikli
Bunlar listeler, diziler değil ... Ne demek istiyorsun? –
dizinin üstündeki – nikli
@nikli dizileridir, liste değildir –