复合类型(compound type)可以将多个不同类型的值组合为一个类型。Rust中提供了两种内置的复合数据类型:元组(tuple)和数组(array)。
目录元组类型
元组是一个具有 固定长度 的数据集合 —— 你无法在声明结束后增加或减少其中的元素数量。
元素使用逗号分隔放入一对圆括号中。元组每个位置的值都有一个类型,这些类型不需要是相同的。例如:
let tup: (i32, f64, u8) = (123, 6.6, 1);
由于一个元组被视作一个单独的复合元素,所以这里的变量tup被绑定到了整个元组上。为了从元组中获得单个的值,我们可以想下面这样使用模式匹配来解构(destructuring)元组:
fn main() {
let tup: (i32, f64, u8) = (123, 6.6, 1);
let (x, y, z) = tup;
println!("the value of y is: {}", y); // 输出 the value of y is: 6.6
}
除了解构,我们还可以通过索引并使用点号(.)来访问元组中的值:
fn main() {
let tup: (i32, f64, u8) = (123, 6.6, 1);
let x = tup.0;
let y = tup.1;
let z = tup.2;
println!("x = {}, y = {}, z = {}", x, y, z); // 输出 x = 123, y = 6.6, z = 1
}
这段程序首先创建了一个元组tup,随后又通过索引访问元组的各个元素,并将它们的值绑定到新的变量上。元素的索引从 $0$ 开始。
数组类型
Rust中的数组:(1)数组元素必须是相同的类型;(2)数组拥有固定的长度,一旦声明就不能随意更改大小。
在Rust中,将逗号分隔的值放置在一对方括号内来创建一个数组:
let arr = [1, 2, 3, 4, 5];
定义数组是可以指定数组类型和大小,如:
let arr: [i32; 5] = [1, 2, 3, 4, 5];
分号前的 i32 表示数组内所有元素的类型,分号后的 5 表明当前的数组包含 5 个元素。
若声明的数组具有相同数值,可以按照如下形式定义:
let arr = [3; 5];
相当于定义了一个大小为5且数组元素均为5的数组arr。
对于一个数组 arr
,可以通过索引访问其中的元素,比如 arr[2]
为数组 arr
中下标为 2
的元素。数组元素下标从 0
开始。例如下面的程序:
fn main() {
let a = [1, 2, 3, 4, 5];
println!("a[0] = {}, a[1] = {}", a[0], a[1]); // 输出 a[0] = 1, a[1] = 2
}