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
相关推荐
_Coin_-1 小时前
算法训练营DAY27 第八章 贪心算法 part01
算法·贪心算法
iCxhust4 小时前
c# U盘映像生成工具
开发语言·单片机·c#
yangzhi_emo5 小时前
ES6笔记2
开发语言·前端·javascript
董董灿是个攻城狮5 小时前
5分钟搞懂什么是窗口注意力?
算法
Dann Hiroaki5 小时前
笔记分享: 哈尔滨工业大学CS31002编译原理——02. 语法分析
笔记·算法
emplace_back6 小时前
C# 集合表达式和展开运算符 (..) 详解
开发语言·windows·c#
jz_ddk6 小时前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
萧曵 丶6 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
xiaolang_8616_wjl6 小时前
c++文字游戏_闯关打怪2.0(开源)
开发语言·c++·开源