本文节选自<<Rust语言圣经>>一书
欢迎大家加入Rust编程学院,一起学习交流:
QQ群:1009730433
数组
在日常开发中,使用最广的数据结构之一就是数组,在Rust中,最常用的数组有两个,第一个是长度固定且很快速的array
,第二个是可动态增长的但是有一点性能损耗的Vector
,在本书中,我们称呼array
为数组,Vector
为动态数组。
不知道你们发现没,这两个数组的关系跟&str
与String
的关系很像,前者是长度固定的字符串切片,后者是可动态增长的字符串。其实,在Rust中无论是String
还是Vector
,它们都是Rust的高级类型:集合类型,在后面章节会有详细介绍。
对于本章节,我们的重点还是放在数组array
上。数组的具体定义很简单:将多个类型相同的元素依次组合在一起,就是一个数组。结合上面的内容,可以得出数组的三要素:
- 长度固定
- 元素必须有相同的类型
- 依次线性排列
这里再啰嗦一句,我们这里说的数组是Rust的基本类型,因此长度是固定的,这个跟其他编程语言不同,而其它编程语言的数组往往对应的是Rust中的动态数组Vector
,希望读者大大牢记此点。
创建数组
在Rust中,数组是这样定义的:
fn main() {
let a = [1, 2, 3, 4, 5];
}
数组语法跟javascript
很像,也跟大多数编程语言很像。由于它的元素类型大小固定,且长度也是固定,因此数组是存储在栈上,性能也会非常优秀。与此对应,动态数组Vector
是存储在堆上,因此长度可以动态改变。当你不确定是使用数组还是动态数组时,那就应该使用后者,具体见[动态数组Vector]一章.
举个例子,在需要知道一年中各个月份名称的程序中,你很可能希望使用的是数组而不是动态数组。因为月份是固定的,它总是包含 12 个元素:
let months = ["January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"];
在一些时候,还需要为数组声明类型,如下所示:
let a: [i32; 5] = [1, 2, 3,