数组与切片 #
一、数组 #
1.1 定义 #
数组是固定大小的元素集合:
rust
fn main() {
let arr = [1, 2, 3, 4, 5];
println!("{:?}", arr);
// 指定类型和大小
let arr2: [i32; 5] = [1, 2, 3, 4, 5];
println!("{:?}", arr2);
// 重复元素
let zeros = [0; 5];
println!("{:?}", zeros); // [0, 0, 0, 0, 0]
}
1.2 访问元素 #
rust
fn main() {
let arr = [1, 2, 3, 4, 5];
println!("第一个: {}", arr[0]);
println!("最后一个: {}", arr[4]);
// 越界检查
// println!("{}", arr[5]); // panic
}
1.3 数组方法 #
rust
fn main() {
let mut arr = [3, 1, 4, 1, 5];
// 长度
println!("长度: {}", arr.len());
// 是否为空
println!("是否为空: {}", arr.is_empty());
// 排序
arr.sort();
println!("排序后: {:?}", arr);
// 反转
arr.reverse();
println!("反转后: {:?}", arr);
// 填充
arr.fill(0);
println!("填充后: {:?}", arr);
}
1.4 遍历 #
rust
fn main() {
let arr = [1, 2, 3, 4, 5];
// 迭代
for x in arr {
println!("{}", x);
}
// 带索引
for (i, x) in arr.iter().enumerate() {
println!("arr[{}] = {}", i, x);
}
}
二、切片 #
2.1 定义 #
切片是对数组或Vec的引用:
rust
fn main() {
let arr = [1, 2, 3, 4, 5];
// 切片引用
let slice: &[i32] = &arr;
println!("{:?}", slice);
// 部分切片
let partial = &arr[1..4];
println!("{:?}", partial); // [2, 3, 4]
// 从开头
let first_two = &arr[..2];
println!("{:?}", first_two);
// 到结尾
let last_three = &arr[2..];
println!("{:?}", last_three);
}
2.2 切片操作 #
rust
fn main() {
let arr = [1, 2, 3, 4, 5];
let slice = &arr[1..4];
println!("长度: {}", slice.len());
println!("第一个: {}", slice[0]);
// 迭代
for x in slice {
println!("{}", x);
}
}
2.3 函数参数 #
rust
fn sum(slice: &[i32]) -> i32 {
slice.iter().sum()
}
fn main() {
let arr = [1, 2, 3, 4, 5];
let vec = vec![1, 2, 3, 4, 5];
println!("数组求和: {}", sum(&arr));
println!("Vec求和: {}", sum(&vec));
}
三、Vec 动态数组 #
3.1 创建 #
rust
fn main() {
// 空Vec
let mut v: Vec<i32> = Vec::new();
// 使用宏
let v2 = vec![1, 2, 3, 4, 5];
// 指定容量
let mut v3 = Vec::with_capacity(10);
v.push(1);
v.push(2);
println!("{:?}", v);
println!("{:?}", v2);
}
3.2 访问 #
rust
fn main() {
let v = vec![1, 2, 3, 4, 5];
// 索引访问
println!("v[0] = {}", v[0]);
// get方法
match v.get(0) {
Some(x) => println!("v[0] = {}", x),
None => println!("越界"),
}
}
3.3 修改 #
rust
fn main() {
let mut v = vec![1, 2, 3];
// 添加元素
v.push(4);
println!("push: {:?}", v);
// 删除元素
let last = v.pop();
println!("pop: {:?}, v: {:?}", last, v);
// 插入
v.insert(1, 10);
println!("insert: {:?}", v);
// 删除指定位置
v.remove(0);
println!("remove: {:?}", v);
// 清空
v.clear();
println!("clear: {:?}", v);
}
3.4 遍历 #
rust
fn main() {
let mut v = vec![1, 2, 3, 4, 5];
// 不可变遍历
for x in &v {
print!("{} ", x);
}
println!();
// 可变遍历
for x in &mut v {
*x *= 2;
}
println!("{:?}", v);
}
四、实践示例 #
4.1 查找 #
rust
fn find_max(slice: &[i32]) -> Option<i32> {
slice.iter().max().copied()
}
fn main() {
let arr = [3, 1, 4, 1, 5, 9, 2, 6];
match find_max(&arr) {
Some(max) => println!("最大值: {}", max),
None => println!("数组为空"),
}
}
4.2 排序 #
rust
fn main() {
let mut v = vec![3, 1, 4, 1, 5, 9, 2, 6];
v.sort();
println!("升序: {:?}", v);
v.sort_by(|a, b| b.cmp(a));
println!("降序: {:?}", v);
}
4.3 过滤 #
rust
fn main() {
let v = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let evens: Vec<i32> = v.iter().filter(|x| *x % 2 == 0).copied().collect();
println!("偶数: {:?}", evens);
}
五、总结 #
本章学习了:
- 数组定义和操作
- 切片引用
- Vec 动态数组
- 常用方法
下一章,我们将学习元组。
最后更新:2026-03-27