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