Silk数组
数组是常用的数据结构,数组中的每个元素都可通过它的索引获取,索引从0开始。
Silk数组通过方括号定义,如果有初始化的元素,直接写在方括号内,用逗号隔开。
array=[];
array=[10,20,30];
访问数组内的元素通过索引获取:
print(array[1]);//获取数组里第二个元素,就是20
Silk数组内的元素可以混用任何Silk的数据类型:
array=[1,true,"good",null];
for(i=0;i<array.size();i++)
print(array[i]);
甚至数组内可以嵌套包含数组或字典:
dict1={"name":"wang","age":10};
array1=["good","OK"];
array2=[1,true,"good",null,array1,dict1];
for(i=0;i<array2.size();i++)
print(array2[i]);
甚至可以多重嵌套:
array1=["good","OK"];
array2=[1,true,"good",null,array1];
array3=[2,array1,array2,"hi"];
print(array3[2][4][0]);
也可以直接把数组或字典定义嵌套包含在数组里:
array2=[1,true,"good",null,["good","OK"],{"wang":30}];
for(i=0;i<array2.size();i++)
print(array2[i]);
创建多维数组可以直接定义在方括号内:
arr=[[1,2,3],[4,5,6]];//创建2*3大小的二维数组
print(arr[1][1]);
也可以用下面的函数创建二维数组:
//创建N*M大小的二维数组
func create_2d_array(N,M,value=0)
{
array=[];
array.resize(N);
for(i=0;i<N;i++)
{
array[i]=[];
array[i].resize(M,value);
}
return array;
}
当然,最简单的方法是用数组的成员函数create2d和create3d直接创建二维和三维数组。
数组成员函数:
append()
向数组尾部添加元素,数组大小也随之增加。
array=["good","OK"];
array.append("Great");
print(array[2]);
array.append(100.25);
print(array[3]);
size()
获取数组大小,即数组内元素个数, 也可以通过内置函数_len(array)获取
resize(count, value)
重新定义数组大小,参数count为数组大小,value为数组中新元素的初值,可以忽略。
定义数组后,如果没有指定初始化元素,默认大小为0,如果想改变或重新定义大小,用resize()函数:
array=[];
array.resize(3);//重新定义数组大小为3,但3个元素没有初值,需要赋值。
array[0]=123;
array[1]="OK";
array[2]=32.12;
array2=[];
array2.resize(3,"ok");//重新定义数组大小为3,3个元素的初值都为"ok"。
clear()
清空数组里的所有元素
array=["good","OK"];
array.clear();
print(array.size());
erase(pos)
删除数组里位置pos上的元素
erase(pos,pos2)
删除数组里从开始位置pos到结束位置pos2之间的元素,不包括pos2位置的元素array=["good","OK",2,100,"fine"];
array.erase(1,3);
for(i=0;i<array.size();i++)
print(array[i]);
insert(pos,item)
在数组里位置pos上插入一个元素item
array=["good","OK",2,100,"fine"];
array.insert(1,"new");
for(i=0;i<array.size();i++)
print(array[i]);
sort()
对整个数组从小到大排序,如果数组里有不同的类型,将会按类型分组排序。
array=[23,44,24,221,32,4,56,63,3,3,45];
array.sort();
for(i=0;i<array.size();i++)
print(array[i]);
排序结果:
3,3,4,23,24,32,44,45,56,63,221
array=[23,44,24,221,32,4,56,63,3,23.43,4.6,"qabc","bbc"];
array.sort();
for(i=0;i<array.size();i++)
print(array[i]);
排序结果:
bbc,qabc,3,4,23,24,32,44,56,63,221,4.6,23.43
swap(array)
和另外一个数组array交换内容,array必须也是数组:
main()
{
a=[0,1,2];
b=["a","b"];
a.swap(b);
print(a,b);
}
运行结果:
["a" , "b" ] [0 , 1 , 2 ]
create2d(n,m,value),
create3d(n,m,k,value)
create2d创建n*m大小的二维数组,数组的初始值用value填充,value可以省略。创建成功后原数组将成为二维数组。
create3d创建n*m*k大小的三维数组,数组的初始值用value填充,value可以省略。创建成功后原数组将成为三维数组。
main()
{
a=[];
a.create2d(2,3,"ok");//在a上创建2*3大小的二维数组,初始值为"ok"
print(a);
b=[];
b.create3d(2,3,2,0);//在b上创建2*3*2大小的三维数组,初始值为0
print(b);
}
运行结果:
[["ok" , "ok" , "ok" ] , ["ok" , "ok" , "ok" ] ]
[[[0 , 0 ] , [0 , 0 ] , [0 , 0 ] ] , [[0 , 0 ] , [0 , 0 ] , [0 , 0 ] ] ]
_getptr(),
_restore(ptr)_getptr()和_restore(ptr)用以解决对象的循环引用问题,具体请参考
内存管理。