此页内容

约 470 字大约 2 分钟

2022-06-03

在 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字符串切片也同理