数组

数组是有序的元素序列, 元素可以是任意的类型, 如整型、字符串或者自定义类型. 数组元素可以通过索引(下标)来读和写, 索引从 0 开始, 第二个索引为 1, 以此类推.

声明

声明一个数组的语句如下: arr = [1, "Two", "三"]

访问数组元素

数组元素可以通过索引(位置)来读取. 格式为数组名后加中括号, 中括号中为索引的值. 例如: print('第三个元素为:', arr[2]); 如果索引超出长度, 会抛出异常, 可参考下方可选链 如果索引x为负数, 会取倒数第abs(x)个元素

切片

可以通过以下方式获得数组的部分元素 arr = [1, "Two", "三", "IIII", 5.0001]; print(arr[1:3]); // 获得第1到第3个之间元素(前闭后开,获得索引1、2) print(arr[:2]); // 获取前两个元素(获得索引0、1) print(arr[3:]); // 获取第3个之后的元素(含索引3) print(arr[-2:]); // 获取最后两个元素 print(arr[:-3]); // 获取倒数第3个之前的元素 索引超出范围时, 不会抛出异常, 而是返回空数组

遍历

for (ind, ele in arr) { print(`索引 = ${ind}, 元素 = ${ele}`) }

长度和容量

- 通过len方法获得数组的长度 - 通过cap方法获得数组的容量 示例 arr = [1, 2, 3]; // 长度 print(len(arr)); print(arr.len); // 容量 print(cap(arr)); print(arr.cap); 容量并不是代表数组的最大长度, 而是在容量范围内增加长度不会重新申请内存, 对于新手而言可以不用关注

数组原型方法

|方法名|描述| |:-:|:-:| |forEach|遍历元素| |map|遍历元素并将返回值重组成一个数组| |filter|遍历元素并将返回零的内容去掉后重组| |filterMap|遍历元素并将返回非false的元素重组| |asyncMap|异步多线程执行任务| |find|寻找第一个满足条件的元素| |findIndex|寻找第一个满足条件的元素所在的索引| |indexOf|寻找第一个相等元素所在的索引| |fill|将数组的全部元素设置为某个值| |len|数组长度| |length|数组长度| |every|判断数组内元素是否全部满足条件| |some|是否包含某个满足条件的元素| |join|使用字符串将数组拼接成一个String| |toMap|将数组内的元素组合成map| |toBucket|根据某种规则将数组内的元素进行分组| |sort|根据排序规则将数组重新排列| |reduce|逐个执行方法并将结果传递下去| |reverse|将数组元素倒序| |concat|拼接另一个数组并返回| |slice|获得数组切片| |replace(from,to/func,count)|替换元素| |shuffle|洗牌,将数组元素打乱|

bytearray数组方法

|方法名|描述| |:-:|:-:| |hex|仅bytearray可调用,转成十六进制| |split|仅bytearray可调用,将其分割成多个bytearray| |gzip|仅bytearray可调用,将内容进行gzip压缩| |ungzip|仅bytearray可调用,将内容进行gzip解压| |replace|作为bytearray调用时,和string的replace类似,将内容进行替换|

数组指针

绝大多数数组方法不支持修改数组的长度, 如果需要修改, 建议使用数组指针 数组指针具备数组的绝大多数函数和特性

声明

arr = &[]

作为数组使用

arr = &[1, 2, 3, 4]; // Tips: 下一行是以([{开头时, 需要显式以分号结尾本行 (*arr).map(e=>e*e)

数组指针方法

|方法名|描述| |:-:|:-:| |pop|删除数组末尾的元素| |push|添加元素到数组的末尾| |shift|删除数组最前面的元素| |unshift|添加元素到数组的头部| |splice|通过索引添加或删除多个元素| |remove|移除多个元素|

可选链

如果尝试对数组进行取值时, 索引超出了边界, 会抛出slice index out of range的错误, 此时有两种方式可以试探性取值 - 数组 ?. index // 如果索引超出边界,返回nil - 数组 ? [index] // 如果索引超出边界,返回nil 可选链的更多说明可以参考文档运算符