数组
在 Rust 中, 常用的数组有两种:
array
速度很快但长度固定Vector
可动态增长但有性能损耗
array
将多个类型相同的元素依次组合在一起,就是一个数组。
- 长度固定
- 元素必须具有相同的类型
- 依次线性排列
这里说的数组是 Rust 的基本类型,是固定长度的,这点与其他编程语言不同,其它编程语言的数组往往是可变长度的,与 Rust 中的动态数组 Vector
类似。
创建数组
fn main() {
let arr1 = [1, 2, 3, 4];
// 创建一个长度为 3,每个元素都为 1 的数组
let arr2 = [1; 3];
// 声明数组类型, 格式 [type; length]
let arr3: [i32; 3] = [1, 2, 3];
}
访问数组
使用 arr[index]
下标,访问数组元素
fn main() {
let arr = [1, 2, 3, 4];
let a = arr[0]; // 1
let b = arr[3]; // 4
}
数组不允许 越界访问 ,如果发生越界,Rust会出现 panic 。
数组切片
数组切片 是对数组的部分引用。
fn main() {
let arr: [i32; 5] = [1, 2, 3, 4, 5];
let slice1: &[i32] = &arr[1..3]; // 创建已有数组的切片
let slice2: &[i32; 3] = &[1, 2, 3]; // 创建固定长度数组切片
let slice3: &[i32] = &[1, 2, 3, 4]; // 创建长度不固定的数组切片
}
- 切片的长度可以与数组不同,并不是固定的,而是取决于你使用时指定的起始和结束位置
- 创建切片的代价非常小,因为切片只是针对底层数组的一个引用
- 切片类型
[T]
拥有不固定的大小,而切片引用类型&[T]
则具有固定的大小,因为Rust
很多时候都需要固定大小数据类型,因此&[T]
更有用,&str
字符串切片也同理