数组概述
- 数组是长度固定、元素类型相同的数据结构。
- Rust 中的数组是存储在栈上,性能优秀,但长度必须在编译时确定。
创建数组
数组定义示例
fn main() {
let a = [1, 2, 3, 4, 5];
}
数组类型声明示例
fn main() {
let a: [i32; 5] = [1, 2, 3, 4, 5];
}
重复值初始化数组示例
fn main() {
let a = [3; 5];
}
访问数组元素
访问数组元素示例
fn main() {
let a = [9, 8, 7, 6, 5];
let first = a[0];
let second = a[1];
}
越界访问
越界访问示例
fn main() {
let a = [1, 2, 3, 4, 5];
let index = 5;
let element = a[index];
println!("The value of the element at index {} is: {}", index, element);
}
数组元素为非基础类型
- 数组元素不能简单地复制非基本类型,如 String。
数组元素非基础类型错误示例
fn main() {
let array = [String::from("rust is good!"); 8];
}
- 使用 std::array::from_fn 创建包含复杂类型的数组。
使用 from_fn 创建数组示例
fn main() {
let array: [String; 8] = std::array::from_fn(|_i| String::from("rust is good!"));
println!("{:#?}", array);
}
数组切片
数组切片示例
fn main() {
let a: [i32; 5] = [1, 2, 3, 4, 5];
let slice: &[i32] = &a[1..3];
assert_eq!(slice, &[2, 3]);
}
总结
- 数组类型与切片类型容易混淆,注意区分。
- 数组的长度是其类型的组成部分。
- 数组切片在实际开发中使用更多,因为具有固定大小。