Array 类

 Array 类是处理数组的类型。

 可以通过创建这个类的实例,并在间接成员选择运算符([ ])中传递指定的索引的方式将这个类作为数组使用。索引为整数,0表示数组中的第一个元素,1表示第二个对象,依此类推。如果指定负数作为索引,则将被当作从数组的最后开始指定元素。 (-1 表示最后的对象)。

例:
    var a = new Array();
    var i;
    for(i=0;i<100;i++) a[i]=i;


 不必要对数组的大小做出定义。Array 类将自动扩展到用户使用的索引的大小,并将没有被赋值的元素初始化为 void 。

 此外,Array 类拥有 count 属性,该属性表示数组的大小。通过对 count 属性赋值,也可以改变数组的大小。

表达式声明数组

 使用 [ ] ,可以在表达式中现场记述 Array 类型的对象。[ ] 中应该按顺序列举作为数组初始元素的表达式,元素之间用逗号分割。比如说,如果执行
    var ar = ["a", "b", "c"]; 这样一个表达式,则变量 ar 将指向一个包含 "a" "b" "c" 这几个元素的 Array 类型对象。

count

 count 属性表示数组的大小。

load

 load 方法,可以从文件中读取数据。

语法 : load(<文件名>, <模式=''>)

 本方法将从文本文件读取数组数据,将文本文件中的文本按行作为元素放入数组,最终count属性将和文件的行数相等。
 模式参数可以用一个字符串指定读取文件时的模式。模式的含义将随着TJS运行的环境有所不同。如果在 "o" 之后写入一个十进制偏移量,则将从与这个数值相等个字节后的位置开始读取。
 随着 TJS 运行环境的不同,可能存在本方法和 save 方法、 saveStruct 方法无法使用的情况。
 load 方法将返回这个 Array 类对象自身。

save

 save 方法可以向文件写入数据。

语法 : save(<文件名>, <模式=''>)

 本方法将数组写入文件。本方法基本上是一行一个元素顺序记录各个元素数据,但遇到对象和类、函数等类型的数据,文件中对应的位置将是空行。
 模式参数可以用一个字符串指定写入文件时的模式。模式的含义将随着TJS运行的环境有所不同,对于吉里吉里来说,指定 "c" 则将对文件进行简单的加密( 可以使用 load 方法读取 ),指定 "z" 则将把文件压缩保存( 无法与 "c" 共用,该模式保存的数据也可以直接用 load 方法读取 )。如果在 "o" 之后写入一个十进制偏移量,则将从与这个数值相等个字节后的位置开始写入。
 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"  : 按照字符串顺序降序排列

 可以指定函数代替字符串作为排序顺序的依据。函数需要拥有两个参数,并在当第一个参数应排在第二个参数之前时返回 true 。(请注意,TJS 的 sort 与 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");

 则将被存为内容类似于
[
    int 1,
    int 2,
    int 3,
    [
        int 4,
        int 5
    ],
    %[
        "a" => int 1,
        "b" => int 2
    ],
    string "字符串"
]

 这样的文件。这样只需要把这个文件整体作为一个表达式求值,就可以恢复到与保存时相同的结构。
 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 。
 比较操作使用类型识别比较 ( === 运算符的操作 ) 。