今天学习的内容是 Rust 中的数组类型。
创建数组
数组是一种长度固定,元素类型相同的数据存储结构。
JS 中的数组长度可变,元素类型不限,和 Rust 有很大区别。
在 Rust 中使用 [T;N]
表示数组类型,其中 T
表示数组内元素的类型,N
表示数组的长度,比如
// 定义一个数组,元素类型是 u32,长度是5,即有5个元素
let arr: [u32; 5] = [1, 2, 3, 4, 5];
如果数组的初始化元素的值都相同,则可以使用简化写法:
// 创建一个元素均为 1 的,长度为 5 的数组
let arr: [u32; 5] = [1; 5];
使用数组
要使用数组中的元素,可以通过下标索引。数组的索引从 0 开始:
let arr: [u32; 5] = [1, 2, 3, 4, 5];
println!("{}", arr[2]); // 3
使用索引修改元素:
arr[3] = 10;
数组类型也提供了一个关联方式,比如使用 len
获取数组的长度
println!("{}", arr.len()); // 5
数组越界访问
数组不能越界访问,即不能访问超过数组长度的位置的元素。
对于索引的越界访问,如果索引能在编译期确定,就可以在编译时报错;否则就只能在运行时报错,比如:
let arr: [u32; 5] = [1, 2, 3, 4, 5];
println!("{}", arr[5]);
会提示:thread 'main' panicked at 'index out of bounds: the len is 5 but the index is 5'
,意思是索引超过边界了,长度为 5 索引也为 5。
如果是运行时报错的情况,比如变量 index
是一个由字符串转为整数类型的值,它在运行时才会进行转换:
// 一个字符串在 parse 成整数类型时可以出错,使用 `upwrap` 承接,当程序出错的时候就会退出运行
let index = "5".parse::<u32>().unwrap();
println!("{}", arr[index]);
程序在编译时不会报错,在运行时就会报越界访问的错误。
小结
Rust 中的数组类型是一种长度固定,用于组织相同类型的元素的集合类型,在开发中用的非常多。