0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ImageJ Macroの配列について

Last updated at Posted at 2021-02-05

環境 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.concatArray.trimについて追記しました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?