Tôi muốn thực hiện một bản sao và nhận hai đối tượng khác nhau để tôi có thể làm việc trên bản sao mà không ảnh hưởng đến bản gốc.Sao chép danh sách các danh sách trong groovy
tôi có mã này (groovy 2.0.5):
def a = [[1,5,2,1,1], ["one", "five", "two", "one", "one"]]
def b = a
b.add([6,6,6,6,6,6])
println a
println b
sản xuất:
[[1, 5, 2, 1, 1], [one, five, two, one, one], [6, 6, 6, 6, 6, 6]]
[[1, 5, 2, 1, 1], [one, five, two, one, one], [6, 6, 6, 6, 6, 6]]
có vẻ như b và đang thực sự cùng một đối tượng
tôi có thể sửa chữa nó theo cách này:
def a = [[1,5,2,1,1], ["one", "five", "two", "one", "one"]]
def b = []
a.each {
b.add(it)
}
b.add([6,6,6,6,6])
println a
println b
sản xuất kết quả mong muốn của tôi:
[[1, 5, 2, 1, 1], [one, five, two, one, one]]
[[1, 5, 2, 1, 1], [one, five, two, one, one], [6, 6, 6, 6, 6]]
Nhưng bây giờ xem xét điều này, nơi tôi muốn các đối tượng gốc và một bản sao với độc đáo và sắp xếp các yếu tố:
def a = [[1,5,2,1,1], ["one", "five", "two", "one", "one"]]
def b = a
b.each {
it.unique().sort()
}
println a
println b
sản xuất:
[[1, 2, 5], [five, one, two]]
[[1, 2, 5], [five, one, two]]
Nếu tôi cố gắng sửa lỗi lần này thì nó không hoạt động:
def a = [[1,5,2,1,1], ["one", "five", "two", "one", "one"]]
def b = []
a.each {
b.add(it)
}
b.each {
it.unique().sort()
}
println a
println b
mà vẫn sản xuất:
[[1, 2, 5], [five, one, two]]
[[1, 2, 5], [five, one, two]]
gì đang xảy ra?
Tiêu đề đã chỉnh sửa vì đây là các danh sách chứ không phải mảng –