# Array クラス

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

count プロパティは、配列の大きさを表します。

# load

load メソッドは、配列をファイルから読み込みます。
`構文 : load(<ファイル名>, <モード=''>)
`
テキストファイルから配列を読み込みます。ファイルのテキストが一行づつ、各要素に入り、最終的に count プロパティはファイルの行数と同じになります。
モードには、ファイルを読み込む際のモード文字列を指定します。これは TJS が動作している環境によって異なります。"o" に続いてオフセットを10進で指定するとファイルのそのバイト位置からの読み込みになります。
TJS が動作している環境によってはこのメソッドと save メソッド、 saveStruct メソッドは使用できません。
load メソッドは、この Array クラスのオブジェクト自身を返します。

# save

save メソッドは、配列をファイルに書き出します。
`構文 : save(<ファイル名>, <モード=''>)
`
配列をファイルに書き出します。一行ずつ、各メンバが出力されますが、オブジェクトやクラス、関数などへの参照は空行となります。
モードには、ファイルを書き込む際のモード文字列を指定します。これは TJS が動作している環境によって異なりますが、吉里吉里の場合は "c" を指定するとファイルに簡単な暗号化がかかります ( そのまま load メソッドで読み込むことができます ) 。"z" を指定するとファイルを圧縮して保存できます ("c" と併用は出来ません; これもそのまま load メソッドで読み込むことができます)。"o" に続いてオフセットを10進で指定するとファイルのそのバイト位置からの書き込みになります。
save メソッドは、この Array クラスのオブジェクト自身を返します。

# split

split メソッドは、文字列を分割します。
`構文 : split(<パターン/デリミタ集合>, <文字列>, <(予約)>, <空の要素を無視するか=false>)`
配列を初期化し、この配列に、文字列をパターンまたはデリミタ集合で区切った物をコピーします。
第１引数にはパターンまたはデリミタ集合を指定します。
パターンは正規表現オブジェクトである必要があります。
デリミタ集合には、区切り記号となる文字を指定します。文字列を指定することで区切り文字を複数指定できます。
第３引数は将来のバージョンのために予約されています。
空の要素を無視するか、では、空の要素 ( たとえばカンマをデリミタにしているときに ,,,,, など ) の場合にその要素を配列にコピーしない場合は true を指定します。
引数の順番に注意してください。

# join

join メソッドは、配列を結合し、一つの文字列にします。
`構文 : join(<デリミタ>, <(予約)>, <空の要素を無視するか=false>)`
配列の各要素をデリミタで結合し、結合した文字列を返します。
空の要素を無視するか、が true の場合は、要素中の void は無視されます。
`例:
var ar = [ "a", "b", void, "d" ];
var s1 = ar.join(","); // s1 には "a,b,,d" が代入される
var s2 = ar.join(",",,true); // s2 には "a,b,d" が代入される
`

# reverse

reverse メソッドは、配列の要素の並びを逆さまにします。
`構文 : reverse()
`

# sort

sort メソッドは、配列をソート(並び替え)します。
`構文 : sort(<ソート順='+'>, <安定ソートを行うか=false>)`
ソート順は以下の文字列のどれかです。昇順では小さい物から大きい物へと並び替えられ、降順はその逆です。省略すると '+' を指定されたと見なされます。
`"+" : 昇順 (通常の < 演算子での比較)
"-" : 降順
"0" : 数値による昇順 ( 10,2,1 は 1,2,10 に並び替えられます )
"9" : 数値による降順
"a" : 文字列による昇順 ( "a","c","b" は "a","b","c" に並び替えられます )
"z" : 文字列による降順
`
ソート順の文字の変わりに関数を指定することが出来ます。関数は２つの引数を持ちます。第１引数が第２引数よりも前に来るべき場合に真を返す関数を指定します (JavaScript の sort メソッドに渡す関数と、戻り値の意味が違うので注意してください )。
第２引数には、安定ソートを行うかどうかを指定します。省略すると false が指定されたと見なされ、不安定なソートが行われます。安定ソートは、同じ順位の配列要素の順番は、ソート後も同じ順番になります。不安定ソートの場合は同じ順位の配列要素の順番は、ソート後に同じ順番になる保証はありません。
`例:
var array = [ 0, 1, 2, 10, 12, 14, 4, 6, 2 ];
array.sort();
// ↑ メソッド実行後、array は [0, 1, 2, 2, 4, 6, 10, 12, 14] に
array.sort('-');
// ↑ メソッド実行後、array は [14, 12, 10, 6, 4, 2, 2, 1, 0] に
array.sort('a');
// ↑ メソッド実行後、array は [0, 1, 10, 12, 14, 2, 2, 4, 6] に
var array = [ "hoge", "foo" , "bar", "baz" ];
array.sort();
// ↑ メソッド実行後、array は ["bar", "baz", "foo", "hoge"] に
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; } );
// ↑ 文字列の長さの短い順
// (長さが同じ"a" "b" "c" がソート後も "a" "b" "c"
// の順番である保証はない)
var array = [ "abcd", "abc", "ab", "a" , "b", "c" ];
array.sort(function(a,b) { return a.length < b.length; }, true );
// ↑ 文字列の長さの短い順
// (長さが同じ"a" "b" "c" はソート後もこの順番である)
`

# saveStruct

saveStruct はファイルへ構造化されたデータの出力を行います。
`構文 : save(<ファイル名>, <モード=''>)
`
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 メソッドは、配列をコピーします。
`構文 : assign(<コピー元配列>)
`
引数で指定された他の配列の内容を、そっくりコピーします。
辞書配列 (Dictionaryクラスのオブジェクト) をコピー元配列に指定した場合は、その辞書配列の各メンバが、名前、値の順に交互に現れる配列となります。メンバの順番は不定となります。

# assignStruct

assignStruct メソッドは、配列を構造ごとコピーします。
`構文 : assignStruct(<コピー元配列>)
`
引数で指定された他の配列の内容を、そっくりコピーします。
assign メソッドと違い、メンバに配列あるいは辞書配列があった場合は、再帰的にその内容も コピーします ( assign メソッドの場合は参照がコピーされるだけです )。

# clear

clear メソッドは、配列の要素をすべて削除します。

# erase

erase メソッドは、指定された添え字の要素を削除します。
`構文 : erase(<添え字>)
`
指定された位置にある添え字を削除します。添え字以降の要素は一つずつ前にずれ、詰められます。添え字が範囲外の場合は例外が発生します。

# remove

remove メソッドは、指定された値と同じ値を持つ要素を削除します。
`構文 : remove(<値>, <すべて削除するか=true>)
`
指定された値と各要素を識別比較し ( === 演算子の動作 )、一致した要素を削除します。
すべて削除するか、が false の場合は、最初に見つかった要素のみを削除します。そうでなければ、見つかったすべての要素を削除します。

# insert

insert メソッドは、指定された値を指定された位置に挿入します。
`構文 : insert(<位置>, <値>)
`
位置で示された添え字位置に、値で示された要素を挿入します。位置以降の要素は一つずつ後ろにずれます。

# add

add メソッドは、指定された値を配列の最後に追加します。
`構文 : add(<値>)
`
配列の最後に値で示された要素を追加します。
このメソッドは値が追加された位置を返します。

# find

find メソッドは、指定された値が最初に現れる添え字を返します。
`構文 : find(<値>, <検索開始位置=0>)
`
指定された値を、検索開始位置の添え字から順に見ていき、最初に現れる添え字を返します。指定された値が見つからなかったときは -1 を返します。
比較には識別比較 ( === 演算子の動作 ) が用いられます。

# push

push メソッドは、指定された要素を配列の最後に追加します。
addメソッドと違い、このメソッドは追加後の配列のサイズを返します。また、複数の引数を指定した場合は、すべての引数を順番に追加します。
`構文 : push(<値>, ...)
`

# pop

push メソッドは、配列の最後から一つ要素を取り出し、それを返します。取り出された要素は配列から削除されます(配列のサイズは一つ減ります)。
このメソッドは、取り出された要素を返します。要素が無かった場合はvoidを返します。
`構文 : pop()
`

# unshift

unshift メソッドは、要素を配列の先頭に追加します。複数の要素が指定された場合は複数の要素を先頭に追加することができます。この場合は、たとえば a, b, c の順番で渡された場合は、配列の先頭の要素は a, b, c の順番になります。
このメソッドは追加後の配列のサイズを返します。
`構文 : unshift(<値>, ...)
`

# shift

shift メソッドは、配列の最初から一つ要素を取り出し、それを返します。取り出された要素は配列から削除されます(配列のサイズは一つ減ります)。
このメソッドは、取り出された要素を返します。要素が無かった場合はvoidを返します。
`構文 : shift()
`