一 概念
-
概述
-
基础用法
-
示例
1.rust元组(Tuple)
rust元组是一种将多个类型不一定相同的数据捆绑在一起形成的整体的复合类型。你可以把元组想象成一个盒子,它可以装下不同种类的物品。
- 元组是一个复合类型
- 其长度是固定的
- 一旦声明就无法改变
- 元组的下标从0开始
2.基础语法
let tuple变量名称 :(数据类型1, 数据类型2, ...) = (数据1, 数据2, ...);
let tuple_name : (data_type1, data_type2, ...) =(value1, value2, value3);
let tuple变量名称 = (数据1, 数据2, ...); //也可以忽略数据类型
let tuple_name = (value1, value2, value3);
- 使用一对小括号()把所有元素放在一起,元素之间使用逗号,分隔。
- 定义元组数据类型的时候也是一样的。
- 如果显式指定元组的数据类型,那么数据类型的个数必须和元组个数相同,否则会报错。
- 输出元组中的所有元素,必须使用{:?}格式化符,因为元组是一个复合类型。
fn main(){
let tuple: (i32, f64, u8) = (-325, 4.9, 22);
println!("{:?}", tuple); //输出结果 (-325, 4.9, 22)
}
//以下输出的语句是不能输出元组中的元素的
println!("{}",tuple); //因为元组是复合类型,要输出复合类型的数据必须使用println!("{:?}",tuple_name)
访问元组元素
用法:元组变量.索引数字
注:索引从0开始
//这个元组拥有3个元素
let tuple: (i32, f64, u8) = (-325, 4.9, 22);
//通过下面方式访问各个元素
tuple.0 //-325
tuple.1 //4.9
tuple.2 //22
范例
fn main(){
let tuple: (i32, f64, u8) = (-325, 4.9, 22);
println!("integer is :{:?}", tuple.0);
println!("float is :{:?}", tuple.1);
println!("unsigned integer is :{:?}", tuple.2);
}
元组作为函数的参数
在rust语言中,元组也可以作为函数的参数。
函数参数中元组参数的声明语法和声明一个元素变量是相似的
fn funciton_name(tuple_name:(i32, bool, f64)){}
范例
//声明一个函数print,它接受一个元组作为参数并打印元组中的所有元素
fn main(){
let b:(i32, bool, f64) = (110, true, 10.9);
print(b);
}
//使用元组作为参数
fn print(x:(i32, bool, f64)){
println!("Inside print method");
println!("{:?}", x);
}
//输出结果
Inside print method
(110, true, 10.9)
元组解构赋值(destructing) =
解构赋值(destructing)就是把元组(tuple)中的每一个元素按照顺序一个一个赋值给变量。
在rust中使用模式匹配(pattern matching)来解构元组。
元组解构赋值(destructing)语法格式:
(age, is_male, cgpa) = (30, true, 7.9);
上面这种赋值操作称之为 元组解构赋值,它会把等号(=)右边的元组的元素按照顺序一个一个赋值给等号左边元组里的变量。
赋值完成后,左边的各个变量的值为:
age = 30;
is_male = true;
cgpa = 7.9;
解构操作是rust语言一个特性。
范例
fn main(){
let b:(i32, bool, f64) = (30, true, 7.9);
print(b);
}
fn print(x:(i32, bool, f64)){
println!("Inside print method");
let (age, is_male, cgpa) = x;
println!("Age is {}, isMale? {}, cgpa is {}", age, is_male, cgpa);
}
//输出结果
Inside print method
Age is 30, isMale? true, cgpa is 7.9