メモ(配列の切り出し、代入、コピー)
投稿者: 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
コメントする
コメントするには、ログインする必要があります。
コメント一覧
コメントはありません。