環境 ImageJ 1.53c
aa = newArray(5); // 配列長5の一次元配列
print(aa.length); // 常に5
配列の初期値は0で、数値として読み出しても文字列として読み出してもすべて0になっている。配列長は常に宣言時の長さである。
一般の変数は特に宣言せずに使えるが、配列として使うなら宣言が必要で、宣言していない変数bb
にいきなりbb[0] = 1;
とはできない。ただし、関数の戻り値として返ってくる配列を受ける場合は、宣言しなくて大丈夫。
配列長は適宜伸縮しないので、Array.concat
で延長したり、Array.trim
で添字が若い部分を取り出す。
aa = Array.concat(aa, newArray(4));
print(aa.length); // 9
aa = Array.trim(aa, 3);
print(aa.length); // 3
作成できる配列は一次元のみ。
配列として宣言された変数は配列長情報を持ったポインタのようになっているみたいで、配列同士の代入操作では内容がコピーされるわけではなくエイリアスの作成が起こる。
aa = newArray("A", "A", "A");
bb = newArray("B", "B", "B", "B", "B");
cc = newArray("C", "C");
bb = aa;
cc = aa;
とすると、aa、bb、ccすべてA, A, Aとなり、
Array.print(aa); // 結果はA, A, A
Array.print(bb); // 結果はA, A, A
Array.print(cc); // 結果はA, A, A
どの配列変数名で中身を変更してもすべて更新される。
bb[1] = "B";
cc[2] = "C";
Array.print(aa); // 結果はA, B, C
Array.print(bb); // 結果はA, B, C
Array.print(cc); // 結果はA, B, C
配列として宣言した変数名に、添字をつけずに代入操作を行うと配列ではなくなり、普通の変数になる。
aa = newArray(5);
aa[0] = "A";
Array.print(aa); // 結果はA, 0, 0, 0, 0
aa = "a";
Array.print(aa); // エラーになる
print(aa); // 結果はa
20210205 Array.concat
、Array.trim
について追記しました。