数组
Rust 的数组用于存储相同类型的数据集。 [T; N]表示一个拥有 T 类型,N 个元素的数组。数组的大小是固定。
数组的长度不可变。
创建数组
let a = [0, 1, 2, 3, 4]; // 创建数组。
let array:[i32; 9] = [3; 9]; // 创建 9个3 的数组。array变量不可变,无法修改其中元素。
访问数组
let x = array[1];
println!("{}",x);
需要注意的是,数组的索引值必须为usize的,否则会无法通过编译。
例:若i不是usize类型,则无法编译。
fn main() {
let a = [1,2,3,4];
let i : usize = 1;
// let i = 1; // 通过编译。Rust编译器会把i转为usize类型。
// let i : i32 = 1; // 无法通过编译。
// let i : u32 = 1; // 无法通过编译。
println!("{:?}",a[i]);
}
另外,需要注意,若访问数组越界,编译不会报错。运行时程序会抛出Panic,并中断程序。
修改数组
let mut array:[i32; 9] = [3; 9]; // 创建 9个3。
array[1]=10;
array[3]=30;
println!("{:?}",array); // 输出 [3, 10, 3, 30, 3, 3, 3, 3, 3]
遍历数组
for x in &array {
println!("{}", x);
}
数组类型
与Go语言一样。 数组的长度也是属于数组类型的一部分。
即[i32;5]与[i32;10]不是一种类型。
例:以下代码编译会报错。
fn show(arr: [u8;3]) { // 参数的类型是[u8;3]。
for i in &arr {
print!("{} ", i);
}
}
fn main() {
let a: [u8; 3] = [1, 2, 3];
show(a); // 正确代码。
let b: [u8; 4] = [1, 2, 3, 4];
show(b); // 错误代码。b的类型是[u8; 4],与函数的参数类型不匹配。编译不通过。
}
操作函数
长度
len()函数,返回数组长度。返回类型usize。
let arr: [u8; 3] = [1, 2, 3];
let l = arr.len();