数组和列表
数组
数组是最主要的有序数据结构。它的用法和 JavaScript 数组相同:可随机访问,动态调整大小,以及更新等。
ReScript 数组的元素类型必须相同,即满足同质性(homogeneous)。
用法
查看 Js.Array 模块的 API 文档。
访问和更新数组项的方法如下:
列表
ReScript 也提供了单链表,它具有以下特性:
不可变
头插速度快
获取头部元素快
其他操作很慢
和数组一样,列表的元素类型必须相同。
用法
你可以使用列表来利用它可变长度,快速头插,和快速拆分的特性,所有操作都是不可变且无副作用的,而且相对高效。
如果你要进行随机访问或非头插操作,那么请勿使用列表。你的代码最后会变得又丑又慢。
标准库提供了一个 List 模块。
无副作用头插
使用展开(spread)语法:
myList
不会被修改,anotherList
的值是 list{0, 1, 2, 3}
。这个操作十分高效(常数而非线性时间复杂度),anotherList
的最后 3 个元素是与 myList
共享的!
注意,list{a, ...b, ...c}
的语法是错误的,我们不支持列表的多次展开。这是一个线性操作(O(b)
),因为 b 中的每一项都要被逐一添加到 c 的头部。你可以使用 List.concat
完成这个操作,但我们非常不建议这样做。
我们也不鼓励更新列表中间的任意项,因为它的性能和内存分配开销是线性的(O(n)
)。
访问
switch
(详见模式匹配)通常用于访问列表项: