近代の言語では、配列の要素は配列の変数さえ分かればすぐに取得できますね。
takk@deb9:~$ perl -e '@arr=1..10;print scalar(@arr) ."\n"' 10 takk@deb9:~$ perl -e '$arr[31]=10;print scalar(@arr) ."\n"' 32 takk@deb9:~$
BASICではどうしていたのでしょう。
$lang: "qb" dim a(50) print lbound(a) print ubound(a) size = ubound(a) - lbound(a) + 1 print "elements = ";size
このようにbound(境界)を求める関数を使ってました。lboundはlower boundで配列添え字の最小値が取得でき、uboundは、upper boundで最大値が取得できます。
実行結果です。
0 50 elements = 51
要素数は、最大50-最小0+1の、51になります。
OPTION BASEを変えてみましょう。
$lang: "qb" option base 10 dim b(20) print lbound(b) print ubound(b) size = ubound(b) - lbound(b) + 1 print "elements = ";size
最小が10に底上げされたので、要素数は11です。
10 20 elements = 11
二次元配列の場合は残念なことに、次元数をbound関数に指定せねばなりません。
$lang: "qb" option base 0 dim c(7,9) print lbound(c,1) print ubound(c,1) size = ubound(c,1) - lbound(c,1) + 1 print "elements = ";size print lbound(c,2) print ubound(c,2) size = ubound(c,2) - lbound(c,2) + 1 print "elements = ";size
0 7 elements = 8 0 9 elements = 10
三次元になっても指定が面倒なのは同じです。
$lang: "qb" option base 3 dim d(3,3,3) print lbound(d,3) print ubound(d,3) size = ubound(d,3) - lbound(d,3) + 1 print "elements = ";size
3 3 elements = 1
コメント