スクリプト/配列(履歴ID:65)

最終投稿者:Nyan mini rurun9 更新:2012/10/13 13:15:51

配列とは


配列とは順番に並んだデータの列で、何番目という値を指定して、それに関連付けられたデータの操作をおこなえるものです。
変数を配列にすると、同時にたくさんの変数を管理できちゃうのです。

変数はデータをひとつだけ入れておく事ができる「箱」。
これを配列変数にすると、引き出しが複数ある「タンス」状態になります。

変数をまとめて一括で宣言するだけなので、中に入れるのは数値、文字、フラグのどれでもOKです。
では、どう使うのかを見ていきましょー。


配列の作成


Rmakeのスクリプト言語(Arrp)での配列の作成は以下のようにおこないます。
a = createArray()

aというローカル変数に配列が入ります。

配列への参照


配列変数の何番目かの要素に値を設定するには以下のように書きます
a[0] = 3
a[1] = 7

配列の何番目かを表わす値をインデックスと呼び、0から始まります。
インデックスにマイナスの値を指定するとエラーになります。
インデックスそれぞれがひとつずつの変数なので、値を入れない限り中身は空っぽ(null)です。

指定したインデックスの値を取得するには例えば次のように書きます。
speak("a[0] = ", a[0])
speak("a[1] = ", a[1])

この例ではインデックス0とインデックス1の値をメッセージウィンドウに表示しています。


配列のインデックスには別の変数を使う事ができます。
a = createArray()
i = 0
while i < 3
  a[i] = i
i = i + 1
end

この例では a[0]=0, a[1]=1, a[2]=2 の値が入ります。
したがって、同時にたくさんの変数を扱いたい場合に、配列を使う事でまとめて設定&操作する事が可能になるわけです。


配列の長さ


配列の長さは以下ように取得することができます。
x = getArrayLength(a)

配列の長さはcreateArray()で作られたときは0から始まります。
配列のインデックスのどこかに何らかの値が入ると、最大のインデックス+1がその配列の長さとなります。
pushArray, popArray, sliceArrayなど配列の長さを変える効果を持つ関数を呼んだ場合はそれによっても長さが変わります。


使用例


#変数aを配列にします
a = createArray()

#配列変数aに適当な値を追加してみます
a[0] = 0.5
a[1] = 2.5
a[2] = 4.5
speak("a=", a)

#配列の内容を切り捨ててメッセージウィンドウに表示します。
i = 0
while i < getArrayLength(a)
  speak("小数点以下切り捨てa[", i, "] = ", floor(a[i]))
i = i + 1
end
#以下のように表示されます。
# a[0] = 0
# a[1] = 2
# a[2] = 4

#ここからpushArray popArray sliceArrayの例です
speak("push pop slice test")

speak("配列の末尾に6を追加します")
pushArray(a, 6)
#この時点で配列aの内容は[0.5, 2.5, 4.5, 6]

speak("配列の末尾に8を追加します")
pushArray(a, 8)
#この時点で配列aの内容は[0.5, 2.5, 4.5, 6, 8]
speak("a=", a)

speak("配列の末尾の値を取得して、配列の末尾の値を消去します")
b = popArray(a)
#この時点で配列aの内容は[0.5, 2.5, 4.5, 6]
speak("a=", a, "\nb=", b)

speak("配列aのインデックス1から2つ切り取って、それを別の配列cにします")
c = sliceArray(a, 1, 2)
#この時点で配列cの内容は[2.5, 4.5]
#この時点で配列aの内容は[0.5, 2.5, 4.5, 6]

speak("a=", a, "\nb=", b, "\nc=", c)
#以下のように表示されます。
# a=0.5,2.5,4.5,6
# b=8
# c=2.5,4.5



基本変数の場合


配列の書き方がわかった所で、今度は実戦的な基本変数ではどう書くのか、を見ていきましょー。

配列aと普通の変数b,nがあるとします。
この三つが全てローカル変数の場合と、全て基本変数の場合の書き方の違いは次のようになります。
#ローカル変数
a = createArray()
a[n] = 9
b = a[ n ] + 3

#基本変数
setVariable( "a", createArray() )
getVariable("a")[ getVariable("n") ] = 9
setVariable( "b", getVariable("a")[ getVariable("n") ] + 3 )

基本変数だと文字数が突然多くなるので一見して謎ですが、特別難しい事はしていません。
注意点としてはやはり2行目の、配列のn番目に代入する(値を設定する)場合にもgetと書く事ですね。


setVariable("a", createArray())

getVariable("a")[0] = 0.5
getVariable("a")[1] = 2.5
getVariable("a")[2] = 4.5

i = 0
while i < getArrayLength(getVariable("a"))
  speak("a[", i, "] = ", getVariable("a")[i])
i = i + 1
end


二次元配列をつくる事もできます。
配列aのインデックスそれぞれを更に配列にする事で、碁盤の目のように変数が並んでいる形になります。
setVariable("a", createArray() )
n = 0
while n < 10
  getVariable("a")[n] = createArray()
n = n + 1
end

m = 0
while m < 10
  n = 0
  while n < 10
    getVariable("a")[n][m] = n + m*10
  n = n + 1
  end
m = m + 1
end

この例では a[0][0]~a[9][9]までの百個に、順に0~99の値が入ります


配列関連の関数


詳しくは以下のリファレンスをご参照ください。

createArray関数
http://rmake.jp/document/function_reference#createArray%E9%96%A2%E6%95%B0

配列への参照
http://rmake.jp/document/function_reference#[]%E9%96%A2%E6%95%B0

配列への参照
http://rmake.jp/document/function_reference#[]%E9%96%A2%E6%95%B0

配列の長さの取得
http://rmake.jp/document/function_reference#getArrayLength%E9%96%A2%E6%95%B0

pushArray関数
http://rmake.jp/document/function_reference#pushArray%E9%96%A2%E6%95%B0

popArray関数
http://rmake.jp/document/function_reference#popArray%E9%96%A2%E6%95%B0

sliceArray関数
http://rmake.jp/document/function_reference#sliceArray%E9%96%A2%E6%95%B0