スクリプト/配列

最終投稿者: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

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Cdv30200 aoi icon mini aoihikawa(投稿日:2011/09/22 18:21, 履歴)
ちょっと間違い。

「0」を含むため
+1である「6、8」が返りますね。
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/09/22 18:19, 履歴)
タクミ2310号さま>

指定した場所によります。
array[5][7] #最大値

length = getArrayLength(array) #5

length = getArrayLength(array[5]) #7
User icon mini 退会したユーザー(投稿日:2011/09/22 18:02, 履歴)
getArrayLengthで長さを取得するときに
その配列が二次元になってたりしたらどうなるんですか?
Nyan mini rurun9(投稿日:2011/08/01 11:48, 履歴)
同時にたくさんの変数を使う必要がある場合に、便利かも?という話ですよ。
例えば、RPGでマップ内に宝箱をたくさん設置したい。
それぞれについて開けた開けてないをフラグで管理しようとすると、開始スクリプトで基本変数を宝箱の数だけ用意して中にtrueを入れますよね。
ここで、もし数が50だった場合、配列の方が書くのも管理も簡単になる気がしませんか?
更に後々になって数を80に増やしたい場合でも、配列なら変数の準備は数を書きかえるだけで済みますよね。
Material 71926 1 mini なとおとき(投稿日:2011/07/30 23:01, 履歴)
配列自体なんに使うのか全然わかりません(汗;
   mini ___(投稿日:2011/04/16 23:46, 履歴)
オフラインのtxtファイルとかじゃなければどこに書いてもいいんですよ。
使いたいところで使いたいように使ってしまえば使えるようになります。

ただ、基本変数を開始スクリプトに記述すると、
ゲームを再開するたびにリセットされちゃうので注意が必要ですけどね。

割と分かりやすく、というか凄くシンプルに書かれていますので、
使用例あたりのスクリプトをコピペ・編集などして、使い方を学んでください。
実際に使ってみることで、よりソースを読んだ時に分かるようになってきますよー。
User icon mini 退会したユーザー(投稿日:2011/04/16 22:35, 履歴)
んーよくわからないです

特に変数の設定みたいなところ

どこに書くんですか?
Nyan mini rurun9(投稿日:2010/02/21 18:41, 履歴)
#基本変数 a を配列宣言します
setVariable("a", createArray() )
i=0 #配列 a に0~4を入れます
while i<5
#配列の要素に代入するときはsetじゃなくてgetで良いからややこしい
 getVariable("a")[i]=i
i=i+1
end

speak("a=", getVariable("a") )

これを実行すると

a=0,1,2,3,4

と表示されます。
Nyan mini rurun9(投稿日:2010/02/04 13:54, 履歴)
素早い対応、大変ありがとうございます。

基本変数だと [] をどこに書いたら認識してくれるのか謎だったので、
whileと配列関連関数全部(とコピー配列)を使ってn番目を入れ替える動作をまるっとユーザー定義しちゃった所でした(汗
Zararu128x128 mini dycoon(投稿日:2010/02/04 13:40, 履歴)
Rmakeのご利用ありがとうございます。

基本変数を使う場合についても例を書いてみました。
バグがあって以前はこういう書き方ができなかったのですが、
現在は修正しています。

> では、配列a の n 番目の要素に b を代入する際にはどのように表記したら良いのでしょうか?

これについては以下のように書くとよいかと思います。
getVariable("a")[n] = b


よろしくお願いします。
Nyan mini rurun9(投稿日:2010/02/04 00:57, 履歴)
使用例ではローカル変数を用いていますが、
仮に基本変数 a を配列にした場合に
配列a の n 番目(注意点として、0番目が存在する)の要素の中身を取得するには

sliceArray( getVariable("a"), n, 1 )

と書けば良い事まではなんとか判りました。
では、配列a の n 番目の要素に b を代入する際にはどのように表記したら良いのでしょうか?

もし質問自体が意味不明だったりした時は、このコメントは削除しちゃって下さい