011 Rust数组

Rust 数组

数组(Array)用一对中括号 包括的相同类型且长度固定的数据。

数组的三要素:

  • 长度固定
  • 元素的类型必须相同
  • 依次线性排列(元素位置固定)

数组声明

方式一:类型推断

rust 复制代码
let array = [10, 20, 30, 40, 50]; // 推断元素类型和元素个数

方式二:明确元素类型和个数

rust 复制代码
let array:[i32; 5] = [10, 20, 30, 40, 50];

方式三:指定元素值和个数

rust 复制代码
let array= [5;10];  // 输出[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]

数组元素访问

方式一:使用索引,索引从0开始

rust 复制代码
let arr = [10, 20, 30, 40];
let first = arr[0]; // 访问第一个元素 → 10
let third = arr[2]; // 访问第三个元素 → 30

索引越界检查

Rust 会在运行时检查索引有效性,越界访问会导致 panic:

rust 复制代码
let arr = [1, 2, 3];
// 编译通过但运行时报错:index out of bounds
let invalid = arr[5]; // ❌ panic: index 5 out of bounds

方式二:使用 get()方法【推荐】

使用 get()方法返回 Option<&T>,避免 panic:

rust 复制代码
let arr = ["a", "b", "c"];
match arr.get(2) {
    Some(val) => println!("Value: {}", val), // "Value: c"
    None => println!("Index out of bounds"),
}
let array= [5;10];
if let Some(val) = array.get(2) {
   println!("{:?}", val);  // 安全访问值,索引越界不会打印值
} 

多维数组访问

rust 复制代码
let matrix = [[1, 2], [3, 4], [5, 6]];
let element = matrix[1][0]; // 访问第二行第一列 → 3

方式三:通过切片访问

切片 (&T) 使用相同语法:

rust 复制代码
let arr = [10, 20, 30, 40];
let slice = &arr[1..3]; // [20, 30]
println!("{}", slice[1]); // 30

方式四:for...in迭代器遍历数组

rust 复制代码
let array= [5;10];
for item in array.iter(){
    println!("{}",item);        
} 

方式五:for...in索引下标访问

rust 复制代码
let array= [5;10];
for item in 0..array.len(){
    println!("{}",array[item]);        
}

方式六:while循环 + 索引下标

rust 复制代码
let array= [5;10];
let mut index = 0;
while index < 10 {
     println!("the value is: {}", array[index]);
     index += 1;        
}

方式七:loop循环 + 索引下标

rust 复制代码
let array= [5;10];
let mut index = 0;
loop {
    if index >= array.len() {
       break;
    }
    println!("the value is: {}", array[index]);
    index += 1;
}

想要修改数组元素的值,需要用mut关键字声明为可变数组。

rust 复制代码
let arr = [1,2,3,4,5]
// arr[0] = 10;  // 编译错误,arr是不可变数组
let mut arr2 = [10,20,30,40,50]
arr2[0] = 1;   // 正确,arr2为可变数组
相关推荐
Oneslide10 分钟前
ubuntu 手动安装claude
后端
GetcharZp8 小时前
玩转 Linux 机器视觉:手把手带你搞定 Ubuntu 下海康工业相机 C++ SDK
后端
星星在线11 小时前
MusicFree:一个「All in One」的个人音乐服务器,让听歌回归简单
前端·后端
IT_陈寒12 小时前
Redis的SETNX并发问题让我加了三天班
前端·人工智能·后端
demo007x13 小时前
Docling 文档转换以及技术架构分析
前端·后端·程序员
袋鱼不重14 小时前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
用户83562907805114 小时前
使用 Python 操作 Word 内容控件
后端·python
像我这样帅的人丶你还14 小时前
啥? 前端也要会干Java?🛵🛵🛵
后端
Hommy8814 小时前
【剪映小助手】添加贴纸接口(Add Sticker)
后端·github·剪映小助手·视频剪辑自动化·剪映api
LDR00614 小时前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言