オリジナルに影響を与えずにコピーを処理できるように、コピーを実行して 2 つの異なるオブジェクトを取得したいと考えています。
私はこのコードを持っています(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
それは以下を生成します:
[[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]]
b と a は実際には同じオブジェクトのようです
この方法で修正できます:
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
それは私の望む結果を生み出します:
[[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]]
しかし、ここで、元のオブジェクトと、一意で並べ替えられた要素を持つコピーが必要な場所を見てください。
def a = [[1,5,2,1,1], ["one", "five", "two", "one", "one"]]
def b = a
b.each {
it.unique().sort()
}
println a
println b
それは以下を生成します:
[[1, 2, 5], [five, one, two]]
[[1, 2, 5], [five, one, two]]
今回同じ修正を試みても、うまくいきません。
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
それでも生成されます:
[[1, 2, 5], [five, one, two]]
[[1, 2, 5], [five, one, two]]
どうしたの ?