配列は角括弧でくくることで認識される。配列は空の配列[]を代入するか、配列の中に複数の値をカンマで区切って入れることで定義できる。値は数字(注:number)、文字列(注:string)、真偽値(注:boolean)、オブジェクト(注:object)、その他なんでも、あるいはいっぺんに全部でも良い。
_array = []; //空の配列 _array = [1,2,3,4,5,6,7,8,9]; //数字の配列 _array = ["Bob","Peter","John"]; //文字列の配列 _array = [player,_var,true,var,56,"ok",_this]; //混合の配列配列は何の値も入れなくとも、一つの値でも、たくさんの値でも、配列の入った配列も入れられる。特定の配列の中にいくつの値が入っているかを調べるにはcountを使おう。
_array = []; _result = count _array; //_resultは0 _array = ["hello"]; _result = count _array; //_resultは1 _array = [1,2,3]; _result = count _array; //_resultは3countは一次元分の配列しか扱えない。多次元配列(訳注:複数の配列が入れ子となっている配列のこと)を調べるには別々に調べる必要がある。
_array = [[1,2,3],[5,6,7]]; //_arrayは2つの配列[1,2,3]と[5,6,7]を内包配列の中の配列を調べるには、selectと調べたい値が入っている添字(訳注:配列に割り振られている番号のこと)を使う。最初の値の添字は0で、左から右に添字が進み次の値は1、その次は2、という風に。故に15番目の値を調べるにはselect 14をする必要がある。最後の値は内包されている値の数から1を引いた数で調べればよい。
_array = ["orange","blue","red","green"]; _result = _array select 1; //_resultは"blue" _result = _array select ((count _array) - 1); //_resultは"green"、最後の値内包された配列を調べるには一つずつselectしていく。次の例の配列の中の2番目の配列の中の最初の配列の3番目の値を取得するためには:
_array = [[[1,2],[3,4]],[[5,6,7],[8,9]]]; _result = ((_array select 1) select 0) select 2; //_resultは7countの話に戻ろう。この命令には別な構文があり、配列の値それぞれにcode(訳注:{}でくくられたスクリプト)を実行することが出来る。
実行されたcodeがtrueになったら、その値はカウントされ、それ以外はカウントされない。例を挙げるとして、次の配列に"John"が何回出てくるか数えてみよう。
_array = ["John","Samantha","Billy","Archer","John","John","Peter","Casey"]; _result = {_x == "John"} count _array; //_resultは3お気づきのとおり、_xが使用されている。この書き方で実行したcountは全ての値に対してcode{}の中身を実行しながら反復する。_xは特殊変数で、現在実行中の値が代入される。よって現在の値と"John"が同じならばカウントされるのだ。注意として、形が混合された配列の場合正しい形かどうか確かめる必要がある。
//間違い _array = ["John",23,"Samantha",25,"Billy",67,"Archer",45,"John",23,"John",32]; _result = {_x == "John"} count _array; //エラーこの例においては、2つ目の要素を確認しようとした時にエラーを発する。このコードは_xが文字列である前提で作られているのに数字を引数に採ったためだ。これを回避するには前もって正しい形になっているかを確認する必要がある。同時に通常の構文ではエラーを起こすため、遅延評価の構文も使用する。
//正しい _array = ["John",23,"Samantha",25,"Billy",67,"Archer",45,"John",23,"John",32]; _result = {typeName _x == "STRING" && {_x == "John"}} count _array; //エラーにならない配列の中に特定の値が存在するかを確認するには、inを使う。与えた値が検知されたらtrueを返し、それ以外はfalseとなる。特定の値が存在するか、存在するなら添字を返すにはfindを使う。findは値を見つけられなかった場合-1を返し、それ以外は最初に値が出る添字を返す。
_array = [1,"two",3,"four",1,"two",3,"four"]; _result = "four" in _array; //_resultはtrue; _result = 4 in _array; //_resultはfalse; _result = _array find "three"; //_resultは-1 _result = _array find 3; //_resultは2inとfindは大文字と小文字を区別し、
_array = ["one","two","three"]; _result = "TWO" in _array; //_resultはfalse _result = _array find "TWO"; //_resultは-1 /*訳注:以下のスクリプトは現在のバージョンでは正しくありません*/ _array = [[1,2,3],[4,5,6]]; _result = [1,2,3] in _array; //_resultはfalse _result = _array find [1,2,3]; //_resultは-1
(訳注:Arma 3 1.26から、入れ子構造の配列に関しては機能するようになりました。)その1は以上。その2は配列の操作と改変について見てみよう。
Enjoy,
KK
追記: このポストを投稿してから、Arma 3には多くの配列関連の命令が追加された。BIKIの配列関連のスクリプト一覧を確認しよう。思いつくだけで…pushBack、append、reverse、sort、select(新構文)、deleteAt、deleteRange。また、配列 + 配列の計算も大幅に早くなった。
KK's blog – ArmA Scripting Tutorials: Arrays (Part 1) by Killzone Kid
Translated by POLPOX
Translated by POLPOX
0 件のコメント :
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。