getArrayは与えられた正しい配列を返すが、変換はしてくれない。例えばConfigに"sometextstring"という値があったとして、getArrayは["sometextstring"]ではなく[]を返す。isArrayは単純に与えられたConfigが配列か否かを返す。
(以下、一部Arma 3用に改変しています)
class hgun_P07_snds_F: hgun_P07_F {
descriptionShort = "Handgun<br />Caliber: 9x21 mm";
displayname = "P07 9 mm";
magazines[] = {"16Rnd_9x21_Mag",/*省略*/,"30Rnd_9x21_Green_Mag"};
...
};
descriptionShort = "Handgun<br />Caliber: 9x21 mm";
displayname = "P07 9 mm";
magazines[] = {"16Rnd_9x21_Mag",/*省略*/,"30Rnd_9x21_Green_Mag"};
...
};
_result = isArray (configFile >> "cfgWeapons" >> "hgun_P07_snds_F" >> "magazines"); //_resultはtrue _result = getArray (configFile >> "cfgWeapons" >> "hgun_P07_snds_F" >> "magazines"); //_resultは["16Rnd_9x21_Mag",/*省略*/,"30Rnd_9x21_Green_Mag"] _result = getText (configFile >> "cfgWeapons" >> "hgun_P07_snds_F" >> "magazines"); //_resultは"" _result = isArray (configFile >> "cfgWeapons" >> "hgun_P07_snds_F" >> "displayname"); //_resultはfalse _result = getArray (configFile >> "cfgWeapons" >> "hgun_P07_snds_F" >> "displayname"); //_resultは[] _result = getText (configFile >> "cfgWeapons" >> "hgun_P07_snds_F" >> "displayname"); //_resulは"P07 9 mm"さて、配列の値を改変するにはsetを使う。この命令は引数に[添字,新しい値]の形の配列を採る。setは配列の長さを超えた添字の値を変更しようとすると、配列の長さを変える。また、resizeを使えば配列の長さを直接変更できる。resizeは引数に採った数字に応じて、配列の長さを長くする事も短くする事もできる。
_array = [1,2,3,4,6,6,7,8,9]; _array set [4,5]; //_arrayは[1,2,3,4,5,6,7,8,9]になった _array set [count _array,10]; //_arrayは[1,2,3,4,5,6,7,8,9,10]になった _array set [12,13]; //_arrayは[1,2,3,4,5,6,7,8,9,10,<null>,<null>,13]になった _array resize 3; //_arrayは[1,2,3]になった _array resize 5; //_arrayは[1,2,3,<null>,<null>]になった _array resize 0; //_arrayは[]になった配列の値にnilを代入することで値を未定義にする事ができる。これは値を消すことも、配列の長さを変えることもない(訳注:一部の値を消去してその分長さを縮めることについてと思われます)。
_array = [1,2,3,4,5]; _array set [2,nil]; //_arrayは[1,2,any,4,5]になった直接的に配列の値を消した上で長さを変えることはできない。しかしながら、Armaの素晴らしい特長により、いくつか回避策が存在する。+と-の演算子により配列同士を足したり引いたりすることが出来る。加算は単純に1つ目の配列の長さを変え、2つ目の配列の要素を追加する。
_array = [4,5,6]; _array = _array + [7,8,9]; //_arrayは[4,5,6,7,8,9]になった _array = [1,2,3] + _array; //_arrayは[1,2,3,4,5,6,7,8,9]になった減算は1つ目の配列から2つ目の配列の要素を全て取り除き、長さを変更する。
_array = [1,1,2,2,3,3,4,4,5,5]; _array = _array - [1]; //_arrayは[2,2,3,3,4,4,5,5]になった _array = _array - [4,2,5]; //_arrayは[3,3]になった
_array = [[1,2],[3,4]]; _array = _array - [[1,2]]; //_arrayは[[3,4]]になったつまり、配列の特定の値を取り除くには、値を適当な独自の値にし、その後その値を減算するとできる。代入・減算はNullの値、例えばobjNull、locationNull、grpNull、taskNull、teamMemberNull、controlNull、displayNullも使える。
_array = [1,2,3,4,5]; _array set [1,"deletethis"]; //_arrayは[1,"deletethis",3,4,5]になった _array = _array - ["deletethis"]; //_arrayは[1,3,4,5]になった _array = _array set [3,objNull]; //_arrayは[1,3,4,<null-object>]になった _array = _array - [objNull]; //_arrayは[1,3,4]になったここで値を足したいけど、同じ値を重複させないようにするときに使える巧妙なテクニックを紹介しよう。値を足す前に同じ値が存在するか確認する事もできるが、値が存在すると仮定した上で値を引いた後足し直すこともできる。こうすることで配列の中で値が重複しないようにする事ができる。
_array = [1,2,3,4,5]; _array = (_array - [6]) + [6]; //_arrayは[1,2,3,4,5,6]になった _array = (_array - [6]) + [6]; //_arrayは[1,2,3,4,5,6]のまま(何が起きているのかわからない人は、減算と加算を別々に考えてみましょう)
その2はこれまで、その3ではもっと高度な物を使ってみよう。
Enjoy,
KK
KK's blog – ArmA Scripting Tutorials: Arrays (Part 2) by Killzone Kid
Translated by POLPOX
Translated by POLPOX
0 件のコメント :
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。