メモ(配列の切り出し、代入、コピー)
投稿者:
mosmoss
投稿日:2016/05/16 18:06
配列の切り出し、代入、コピーについて
勘違いしていたことがあった
元になる配列から、
sliceArray()を使って切り出したり、
=などを使って別の配列に代入した要素が、
連動して変化する!というのが直感的にわからなかった
切り出し、代入した時点での状態から、
別々の配列になって要素は独自に変化すると、何となく思ってた
aoihikawaさんの配列の実体コピーを行う関数は、
多次元配列を一気にコピーできるから便利!くらいに思っていたけど、
本質は別のところにあったみたい(・ω・)
この、配列の実体コピーってやつが、
最初思ってた配列の切り出しや代入のイメージに、
ぴったりのやつの方だった
ツイート
勘違いしていたことがあった
元になる配列から、
sliceArray()を使って切り出したり、
=などを使って別の配列に代入した要素が、
連動して変化する!というのが直感的にわからなかった
切り出し、代入した時点での状態から、
別々の配列になって要素は独自に変化すると、何となく思ってた
aoihikawaさんの配列の実体コピーを行う関数は、
多次元配列を一気にコピーできるから便利!くらいに思っていたけど、
本質は別のところにあったみたい(・ω・)
この、配列の実体コピーってやつが、
最初思ってた配列の切り出しや代入のイメージに、
ぴったりのやつの方だった
#配列の実体コピーを行う関数
def isArray(arr)
return getArrayLength(splitString(toString(arr),",")) != 1
end
def copyArray(arr)
r = createArray()
i = 0; ilen = getArrayLength(arr)
while i < ilen
if isArray(arr[i])
r[i] = copyArray(arr[i])
else
r[i] = arr[i]
end
i = i + 1
end
return r
end
#元の配列
a = createArray()
a[0] = createArray()
a[0][0] = 0; a[0][1] = 10; a[0][2] = 100
#配列切り出し
A = sliceArray(a, 0, 1)
#配列代入
B = createArray()
B[0] = a[0]
#配列の実体コピー
C = copyArray(a)
plus = true
while plus
a[0][0] = a[0][0] + 1
speak(a[0][0]," ",A[0][0]," ",B[0][0]," ",C[0][0])
#実行結果、1 1 1 0
#a[0][0]に1が足されるのに連動して、A[0][0]とB[0][0]も同時に1ずつ増えて行くがC[0][0]は変化なし
A[0][0] = A[0][0] + 1
speak(a[0][0]," ",A[0][0]," ",B[0][0]," ",C[0][0])
#実行結果、2 2 2 0
#A[0][0]に1が足されるのに連動して、a[0][0]とB[0][0]も同時に1ずつ増えて行くがC[0][0]は変化なし
B[0][0] = B[0][0] + 1
speak(a[0][0]," ",A[0][0]," ",B[0][0]," ",C[0][0])
#実行結果、3 3 3 0
#B[0][0]に1が足されるのに連動して、a[0][0]とA[0][0]も同時に1ずつ増えて行くがC[0][0]は変化なし
C[0][0] = C[0][0] + 1
speak(a[0][0]," ",A[0][0]," ",B[0][0]," ",C[0][0])
#実行結果、3 3 3 1
#C[0][0]は1増えるが他は変化なし
C = copyArray(a)
speak(a[0][0]," ",A[0][0]," ",B[0][0]," ",C[0][0])
#実行結果、3 3 3 3
#配列コピーがされる時点での配列aの状態が配列Cに更新される
end
コメントする
コメントするには、ログインする必要があります。
コメント一覧
コメントはありません。