Rust编程与项目实战-元组

【图书介绍】《Rust编程与项目实战》-CSDN博客

《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com)

Rust编程与项目实战_夏天又到了的博客-CSDN博客

8.2.1 元组的定义

元组是Rust的内置复合数据类型。Rust支持元组,而且元组是一个复合类型。我们知道,标量类型只能存储一种类型的数据。例如一个i32类型的变量只能存储一个数字。复合类型可以存储多个不同类型的数据。复合类型就像我们的菜篮子,里面可以放各种类型的菜。

元组可以将其他不同类型的多个值组合到一个复合类型中。元组还拥有一个固定的长度:无法在声明结束后增加或减少其中的元素数量。通常使用逗号分隔后放置到一对圆括号中创建一个元组。元组每个位置的值都有一个类型,这些类型不需要相同。元组是一个可以包含各种类型值的组合,是把几个类型组合到一起的最简单的方式。元组使用一对圆括号"()"来构造。如果元组中只包含一个元素,应该在后面添加一个逗号,以区分表达式和元组。

值得注意的是,元组有着固定的长度。而且一旦定义,就不能再增长或缩小。元组的下标从0开始。Rust中元组的定义很简单,就是使用一对圆括号把所有元素放在一起,元素之间使用逗号分隔。定义元组数据类型的时候也是一样的。在Rust语言中,元组的定义语法格式如下:

复制代码
let tuple_name:(data_type1,data_type2,data_type3,..., data_typeN) = (value1,value2,value3,...,valueN);

定义元组时也可以忽略数据类型,比如:

复制代码
let tuple_name = (value1,value2,value3,...,valueN);

但需要注意的是,如果显式指定了元组的数据类型,那么数据类型的个数必须和元组的个数相同,否则会报错。比如我们定义一个元组:

复制代码
let tuple:(i32,f64,u8) = (-325,4.9,22);

8.2.2 元组的输出

如果要输出元组中的所有元素,必须使用{:?}格式化符。

复制代码
fn main() {

    let tuple:(i32,f64,u8) = (-325,4.9,22);

    println!("{:?}",tuple);

}

编译运行以上Rust代码,输出结果如下:

复制代码
(-325, 4.9, 22)

仅仅使用下面的输出语句是不能输出元组中的元素的。

复制代码
println!("{ }",tuple)

这是因为元组是一个复合类型,要输出复合类型的数据,必须使用println!("{:?}", tuple_name)。

8.2.3 访问元组中的单个元素

我们可以使用元组名.索引数字来访问元组中相应索引位置的元素,索引从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代码,输出结果如下:

复制代码
integer is :-325

float is :4.9

unsigned integer is :2

再来看一个范例:

复制代码
fn main() {
    //包含各种不同类型的元组
    let long_tuple = (
        1u8, 2u16, 3u32, 4u64, -1i8, -2i16, -3i32, -4i64, 0.1f32, 0.2f64, 'a', true,
    );

    //通过元组的下标来访问具体的值
    println!("long tuple first value: {}", long_tuple.0);
    println!("long tuple second value: {}", long_tuple.1);
    println!("long_tuple: {:?}", long_tuple);

    //元组也可以充当元组的元素
    let tuple_of_tuples = ((1u8, 2u16, 2u32), (4u64, -1i8), -2i16);

    //元组可以打印
    println!("tuple of tuples: {:?}", tuple_of_tuples);

    //但很长的元组无法打印
    //let too_long_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
    //println!("too long tuple: {:?}", too_long_tuple);

    //创建单元素元组需要一个额外的逗号,这是为了和被括号包含的字面量进行区分
    println!("one element tuple: {:?}", (5u32,));
    println!("just an integer: {:?}", (5u32));
}

结果输出:

复制代码
long tuple first value: 1
long tuple second value: 2
long_tuple: (1, 2, 3, 4, -1, -2, -3, -4, 0.1, 0.2, 'a', true)
tuple of tuples: ((1, 2, 2), (4, -1), -2)
one element tuple: (5,)
just an integer: 5
相关推荐
望获linux3 分钟前
【Linux基础知识系列】第四十三篇 - 基础正则表达式与 grep/sed
linux·运维·服务器·开发语言·前端·操作系统·嵌入式软件
dying_man37 分钟前
LeetCode--42.接雨水
算法·leetcode
留不住丨晚霞1 小时前
说说SpringBoot常用的注解?
java·开发语言
hardStudy_h1 小时前
C++——内联函数与Lambda表达式
开发语言·jvm·c++
vortex51 小时前
算法设计与分析 知识总结
算法
艾莉丝努力练剑1 小时前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(三)
c语言·开发语言·数据结构·学习·算法
ZZZS05162 小时前
stack栈练习
c++·笔记·学习·算法·动态规划
hans汉斯2 小时前
【人工智能与机器人研究】基于力传感器坐标系预标定的重力补偿算法
人工智能·算法·机器人·信号处理·深度神经网络
witton3 小时前
Go语言网络游戏服务器模块化编程
服务器·开发语言·游戏·golang·origin·模块化·耦合
vortex53 小时前
算法设计与分析:分治、动态规划与贪心算法的异同与选择
算法·贪心算法·动态规划