Rust编程与项目实战-元组

news2024/11/28 22:44:43

【图书介绍】《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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2227425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云跨AZ部署FortigateHA备忘录

随时保存配置 config system globalset admintimeout 480set alias "FortiGate-VM64-KVM"set gui-auto-upgrade-setup-warning disableset hostname "FG-Slave"set revision-backup-on-logout enableset revision-image-auto-backup enableset timezone &…

Linux高手进阶

查看系统资源占用: top:查看CPU、内存使用情况,类似 windows 的任务管理器 默认 5秒刷新一次语法: 直接输入 top按 q 或 ctrl c 退出内容详解: 第一行: top:命令名称 -系统时间up 23:57 min &…

算法面试小抄

第一章:算法与数据结构要点速学 1.时间复杂度 (大 O) 首先,我们来谈谈常用操作的时间复杂度,按数据结构/算法划分。然后,我们将讨论给定输入大小的合理复杂性。 数组(动态数组/列表) 规定 n arr.length, 注意: &am…

批处理操作的优化

原来的代码 Override Transactional(rollbackFor Exception.class) public void batchAddQuestionsToBank(List<Long> questionIdList, Long questionBankId, User loginUser) {// 参数校验ThrowUtils.throwIf(CollUtil.isEmpty(questionIdList), ErrorCode.PARAMS_ERR…

想要音频里的人声,怎么把音频里的人声和音乐分开?

在音频处理领域&#xff0c;将音频中的人声和音乐分开是一个常见需求&#xff0c;尤其对于音乐制作、影视后期以及个人娱乐应用来说&#xff0c;这种分离技术显得尤为重要。随着科技的发展&#xff0c;现在已经有多种方法可以实现这一目的。 一、使用专业音频处理软件 市面上有…

计算机毕业设计Hadoop+大模型高考推荐系统 高考分数线预测 知识图谱 高考数据分析可视化 高考大数据 大数据毕业设计 Hadoop 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 开题报告 题目&#xff1a…

【动手学强化学习】part2-动态规划算法

阐述、总结【动手学强化学习】章节内容的学习情况&#xff0c;复现并理解代码。 文章目录 一、什么是动态规划&#xff1f;1.1概念1.2适用条件 二、算法示例2.1问题建模2.2策略迭代&#xff08;policyiteration&#xff09;算法2.2.1伪代码2.2.2完整代码2.2.3运行结果2.2.4代码…

《掌握 Java:从基础到高级概念的综合指南》(6/15)

目录 1. 引言 2. 泛型概述 2.1 泛型的定义与使用 2.2 泛型方法 2.3 泛型通配符 3. 注解概述 3.1 内置注解 3.2 自定义注解 3.3 注解处理器 (APT) 4. 泛型与注解对比总结 5. 结论 Java 中的泛型与注解 (Annotation) 1. 引言 Java 泛型和注解是 Java 语言中两个重要…

数据结构初阶———顺序表

一、引言 首先我们应该回顾动态内存开辟的原理 这部分知识对于内存访问至关重要 然而顺序表的实现都是基于C语言的基础 包括指针 结构体 动态内存开辟 realloc malloc h函数的使用与实现 既然要学习顺序表 我们不仅要知道这个实现是基于C语言知识的基础 我们还要知道什么…

疯狂Spring Boot讲义[推荐1]

《疯狂Spring Boot讲义》是2021年电子工业出版社出版的图书&#xff0c;作者是李刚 《疯狂Spring Boot终极讲义》不是一本介绍类似于PathVariable、MatrixVariable、RequestBody、ResponseBody这些基础注解的图书&#xff0c;它是真正讲解Spring Boot的图书。Spring Boot的核心…

DBC文件当中新建CANFD等类型的报文

同学最近有添加CANFD报文的需求&#xff0c;需要用到CANFD类型报文的DBC文件&#xff0c;这下就难住我了&#xff0c;我之前用的DBC文件只有“CAN Standard”“CAN Extended”两种类型&#xff0c;压根没见过FD的。 后来他找到了项目之前的DBC&#xff0c;打开来看&#xff0c…

RabbitMQ集群搭建及使用

1. 概述 前提条件&#xff1a;linux服务器下已经安装好了docker服务。 本文档将搭建一个三台RabbitMQ的集群&#xff0c;包括三个RabbitMQ容器安装在同一服务器和三台不同的服务器。 2. 集群搭建 在一台服务器上创建三个RabbitMQ容器。 2.1.1. 创建容器 执行以下命令创建三…

卡方检验方法概述与类型——四格表和R*C表卡方检验案例

卡方检验是以卡方分布为基础&#xff0c;针对定类数据资料的常用假设检验方法。其理论思想是判断实际观测到的频数与有关总体的理论频数是否一致。 卡方统计量是实际频数与理论频数吻合程度的指标。卡方值越小&#xff0c;表明实际观察频数与理论频数越接近&#xff0c;反之卡…

three.js使用ShaderMaterial实现聚光灯光源demo

文章目录 顶点片元全部 核心&#xff1a; 顶点 varying vec3 vNormal;varying vec3 vViewPosition;void main() {vNormal normalMatrix * normal;vNormal normalize( vNormal );vec4 modelViewPosition modelViewMatrix * vec4(position, 1.0);gl_Position projectionMat…

WPF+MVVM案例实战(三)- 动态数字卡片效果实现

1、创建项目 打开 VS2022 &#xff0c;新建项目 Wpf_Examples&#xff0c;创建各层级文件夹&#xff0c;安装 CommunityToolkit.Mvvm 和 Microsoft.Extensions.DependencyInjectio NuGet包,完成MVVM框架搭建。搭建完成后项目层次如下图所示&#xff1a; 这里如何实现 MVVM 框…

深入理解 SQL 中的 WITH AS 语法

在日常数据库操作中&#xff0c;SQL 语句的复杂性往往会影响到查询的可读性和维护性。为了解决这个问题&#xff0c;Oracle 提供了 WITH AS 语法&#xff0c;这一功能可以极大地简化复杂查询&#xff0c;提升代码的清晰度。本文将详细介绍 WITH AS 的基本用法、优势以及一些实际…

【云原生】Kubernets1.29部署StorageClass-NFS作为存储类,动态创建pvc(已存在NFS服务端)

文章目录 在写redis集群搭建的时候,有提到过使用nfs做storageclass,那时候kubernetes是1.20版本,https://dongweizhen.blog.csdn.net/article/details/130651727 现在使用的是kubernetes 1.29版本,根据之前的修改方式并未生效,反而提示:Error: invalid argument "Re…

算法日记 11 day 二叉树

新的篇章&#xff0c;二叉树&#xff01;&#xff01;&#xff01; 二叉树的种类 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 这棵二叉树为满二叉树&#xff0c;也可以说深度…

IDEA->EasyCode(mapper.xml) 字段无逗号分隔和修改全局变量问题

1.mapperxml字段无逗号分隔 在easycode的设置里找到&#xff1a; 1、Template下的 mapper.xml.vm脚本 2、Global Config下的 mybatisSupport.vm脚本 将脚本里的 $velocityHasNext 替换成 $foreach.hasNext&#xff0c;然后保存。Mybatis-Plus框架操作一样 github->issue连…

红队工具---Behinder学习

1.什么是Behinder&#xff1f; Behinder 是一款用于网络渗透测试的安全工具&#xff0c;主要用于对 Web 应用进行攻击和漏洞利用。它提供了强大的功能&#xff0c;是一款红队的大杀器&#xff0c;几乎是现代web安全必须学习的一款webshell管理工具。 主要用途 渗透测试&#…