Array クラスは
配列を扱うクラスです。
このクラスのオブジェクトを作成し、間接メンバ選択演算子によって指定された添え字を使って配列のように扱うことができます。添え字は整数です。0は先頭の要素を表し、1はその次の要素を表します。負の整数を指定すると、配列の最後から指定したものとして扱われます (-1 は最後の要素を表します)。
例:
var a = new Array();
var i;
for(i=0;i<100;i++) a[i]=i;
配列の大きさは宣言する必要はありません。指定された添え字の大きさまで自動的にサイズが拡張され、何も値が代入されていない要素は void に初期化されます。
また、count プロパティがあり、これが配列のサイズを表しています。count プロパティに値を代入しても配列のサイズを変えることができます。
[ ]
を使って、式中に
Array
クラスのオブジェクトをその場で記述することができます。
[ ]
にはカンマで区切り、初期要素となる式を列挙します。たとえば、
var ar = ["a", "b", "c"];
と記述すれば、
ar
に、
"a" "b" "c"
の要素が入った
Array
クラスのオブジェクトへの参照が代入されます。
count プロパティは、配列の大きさを表します。
load メソッドは、配列をファイルから読み込みます。
構文 : load(<ファイル名>, <モード=''>)
テキストファイルから配列を読み込みます。ファイルのテキストが一行づつ、各要素に入り、最終的に count プロパティはファイルの行数と同じになります。
モードには、ファイルを読み込む際のモード文字列を指定します。これは TJS が動作している環境によって異なります。"o" に続いてオフセットを10進で指定するとファイルのそのバイト位置からの読み込みになります。
TJS が動作している環境によってはこのメソッドと save メソッド、 saveStruct メソッドは使用できません。
load メソッドは、この Array クラスのオブジェクト自身を返します。
save メソッドは、配列をファイルに書き出します。
構文 : save(<ファイル名>, <モード=''>)
配列をファイルに書き出します。一行ずつ、各メンバが出力されますが、オブジェクトやクラス、関数などへの参照は空行となります。
モードには、ファイルを書き込む際のモード文字列を指定します。これは TJS が動作している環境によって異なりますが、吉里吉里の場合は "c" を指定するとファイルに簡単な暗号化がかかります ( そのまま load メソッドで読み込むことができます ) 。"z" を指定するとファイルを圧縮して保存できます ("c" と併用は出来ません; これもそのまま load メソッドで読み込むことができます)。"o" に続いてオフセットを10進で指定するとファイルのそのバイト位置からの書き込みになります。"b"を指定するとバイナリ形式で保存されます(他のモード指定と併用は出来ません; これもそのまま load メソッドで読み込むことができます)。
save メソッドは、この Array クラスのオブジェクト自身を返します。
split メソッドは、文字列を分割します。
構文 : split(<パターン/デリミタ集合>, <文字列>, <(予約)>, <空の要素を無視するか=false>)
配列を初期化し、この配列に、文字列をパターンまたはデリミタ集合で区切った物をコピーします。
第1引数にはパターンまたはデリミタ集合を指定します。
パターンは正規表現オブジェクトである必要があります。
デリミタ集合には、区切り記号となる文字を指定します。文字列を指定することで区切り文字を複数指定できます。
第3引数は将来のバージョンのために予約されています。
空の要素を無視するか、では、空の要素 ( たとえばカンマをデリミタにしているときに ,,,,, など ) の場合にその要素を配列にコピーしない場合は true を指定します。
引数の順番に注意してください。
join メソッドは、配列を結合し、一つの文字列にします。
構文 : join(<デリミタ>, <(予約)>, <空の要素を無視するか=false>)
配列の各要素をデリミタで結合し、結合した文字列を返します。
空の要素を無視するか、が true の場合は、要素中の void は無視されます。
例:
var ar = [ "a", "b", void, "d" ];
var s1 = ar.join(",");
var s2 = ar.join(",",,true);
reverse メソッドは、配列の要素の並びを逆さまにします。
構文 : reverse()
sort メソッドは、配列をソート(並び替え)します。
構文 : sort(<ソート順='+'>, <安定ソートを行うか=false>)
ソート順は以下の文字列のどれかです。昇順では小さい物から大きい物へと並び替えられ、降順はその逆です。省略すると '+' を指定されたと見なされます。
"+" : 昇順 (通常の < 演算子での比較)
"-" : 降順
"0" : 数値による昇順 ( 10,2,1 は 1,2,10 に並び替えられます )
"9" : 数値による降順
"a" : 文字列による昇順 ( "a","c","b" は "a","b","c" に並び替えられます )
"z" : 文字列による降順
ソート順の文字の変わりに関数を指定することが出来ます。関数は2つの引数を持ちます。第1引数が第2引数よりも前に来るべき場合に真を返す関数を指定します (JavaScript の sort メソッドに渡す関数と、戻り値の意味が違うので注意してください )。
第2引数には、安定ソートを行うかどうかを指定します。省略すると false が指定されたと見なされ、不安定なソートが行われます。安定ソートは、同じ順位の配列要素の順番は、ソート後も同じ順番になります。不安定ソートの場合は同じ順位の配列要素の順番は、ソート後に同じ順番になる保証はありません。
例:
var array = [ 0, 1, 2, 10, 12, 14, 4, 6, 2 ];
array.sort();
array.sort('-');
array.sort('a');
var array = [ "hoge", "foo" , "bar", "baz" ];
array.sort();
var array = [ "abcd", "abc", "ab", "a" , "b", "c" ];
array.sort(function(a,b) { return a< b; } );
var array = [ "abcd", "abc", "ab", "a" , "b", "c" ];
array.sort(function(a,b) { return a.length < b.length; } );
var array = [ "abcd", "abc", "ab", "a" , "b", "c" ];
array.sort(function(a,b) { return a.length < b.length; }, true );
saveStruct はファイルへ構造化されたデータの出力を行います。
構文 : saveStruct(<ファイル名>, <モード=''>)
saveStruct メソッドは、要素の状態を復元可能な状態でファイルに出力します。
各要素には文字列、実数、オクテット列、整数を含めることができます。また、要素にオブジェクトがあった場合は、それが Array クラスあるいは Dictionary クラスのオブジェクトである場合に限り、そのオブジェクトの中身もファイルに出力します。それ以外の要素は void が出力されます。
たとえば、
例:
([ 1, 2, 3, [4, 5], %[ a : 1, b : 2 ], "文字列" ]).saveStruct("out.txt");
では
(const) [
1,
2,
3,
(const) [
4,
5
],
(const) %[
"a" => 1,
"b" => 2
],
"文字列"
]
のような内容が出力されます。これはこのファイル全体を一つの式として評価することにより、保存した時と同じ構造を復元できるものです。
ここでの (const) は、 [ ] や %[ ] の中身が定数項しか無いことを表しています。コンパイラはこの(const) を見つけると、直後の式中辞書配列や式中配列を、中身が定数項しかないことと仮定して、高効率で読み込む事ができます。
saveStruct メソッドは、この Array クラスのオブジェクト自身を返します。
assign メソッドは、配列をコピーします。
構文 : assign(<コピー元配列>)
引数で指定された他の配列の内容を、そっくりコピーします。
辞書配列 (Dictionaryクラスのオブジェクト) をコピー元配列に指定した場合は、その辞書配列の各メンバが、名前、値の順に交互に現れる配列となります。メンバの順番は不定となります。
assignStruct メソッドは、配列を構造ごとコピーします。
構文 : assignStruct(<コピー元配列>)
引数で指定された他の配列の内容を、そっくりコピーします。
assign メソッドと違い、メンバに配列あるいは辞書配列があった場合は、再帰的にその内容も
コピーします ( assign メソッドの場合は参照がコピーされるだけです )。
clear メソッドは、配列の要素をすべて削除します。
erase メソッドは、指定された添え字の要素を削除します。
構文 : erase(<添え字>)
指定された位置にある添え字を削除します。添え字以降の要素は一つずつ前にずれ、詰められます。添え字が範囲外の場合は例外が発生します。
remove メソッドは、指定された値と同じ値を持つ要素を削除します。
構文 : remove(<値>, <すべて削除するか=true>)
指定された値と各要素を識別比較し (
=== 演算子の動作 )、一致した要素を削除します。
すべて削除するか、が false の場合は、最初に見つかった要素のみを削除します。そうでなければ、見つかったすべての要素を削除します。
insert メソッドは、指定された値を指定された位置に挿入します。
構文 : insert(<位置>, <値>)
位置で示された添え字位置に、値で示された要素を挿入します。位置以降の要素は一つずつ後ろにずれます。
add メソッドは、指定された値を配列の最後に追加します。
構文 : add(<値>)
配列の最後に値で示された要素を追加します。
このメソッドは値が追加された位置を返します。
find メソッドは、指定された値が最初に現れる添え字を返します。
構文 : find(<値>, <検索開始位置=0>)
指定された値を、検索開始位置の添え字から順に見ていき、最初に現れる添え字を返します。指定された値が見つからなかったときは -1 を返します。
比較には識別比較 ( === 演算子の動作 ) が用いられます。
push メソッドは、指定された要素を配列の最後に追加します。
addメソッドと違い、このメソッドは追加後の配列のサイズを返します。また、複数の引数を指定した場合は、すべての引数を順番に追加します。
構文 : push(<値>, ...)
push メソッドは、配列の最後から一つ要素を取り出し、それを返します。取り出された要素は配列から削除されます(配列のサイズは一つ減ります)。
このメソッドは、取り出された要素を返します。要素が無かった場合はvoidを返します。
構文 : pop()
unshift メソッドは、要素を配列の先頭に追加します。複数の要素が指定された場合は複数の要素を先頭に追加することができます。この場合は、たとえば a, b, c の順番で渡された場合は、配列の先頭の要素は a, b, c の順番になります。
このメソッドは追加後の配列のサイズを返します。
構文 : unshift(<値>, ...)
shift メソッドは、配列の最初から一つ要素を取り出し、それを返します。取り出された要素は配列から削除されます(配列のサイズは一つ減ります)。
このメソッドは、取り出された要素を返します。要素が無かった場合はvoidを返します。
構文 : shift()
pack メソッドは、引数で指定された文字列に従い、配列要素をバイナリ(Octet)化して返します。
指定の文字列はテンプレートと呼びます。
テンプレートは、型指定文字とその長さを並べたものです。長さとして * が指定された時は残り全ての長さを表します。長さが省略された場合は1として扱います。
構文 : pack(テンプレート文字列)
テンプレート文字列には以下の文字が使用可能です。
a : ASCII 文字列(ヌル文字が補完される)
A : ASCII 文字列(スペースが補完される)
b : 2進数文字列(下位ビットから上位ビットの順)
B : 2進数文字列(上位ビットから下位ビットの順)
c : 符号付き1バイト数値(-128 縲鰀 127)
C : 符号無し1バイト数値(0縲鰀255)
d : 倍精度浮動小数点値
f : 単精度浮動小数点値
h : 16進数文字列(low nybble first)
H : 16進数文字列(high nybble first)
i : 符号付きint数値(通常4バイト)
I : 符号無しint数値(通常4バイト)
l : 符号付きlong数値(通常4バイト)
L : 符号無しlong数値(通常4バイト)
n : 符号無しshort数値(ネットワークバイトオーダ)
N : 符号無しlong数値(ネットワークバイトオーダ)
s : 符号付きshort数値(通常2バイト)
S : 符号無しshort数値(通常2バイト)
v : 符号無しshort値(リトルエンディアン)
V : 符号無しlong値(リトルエンディアン)
x : ヌル文字
X : 1バイト後退
@ : 絶対位置までヌル文字を埋める
m : Base64 decode
例:
var oct = array.pack("a4i2");
この例ではarrayの要素0番目の文字列を4文字をchar型で出力し、4文字に満たない場合は\0を追加します。
その後要素1番縲鰀2番の整数を符号付き4バイト整数として追加します。
つまり、char * 2 + int * 4 のバイナリ列として出力されます。