Rust学习笔记_03——元组
Rust学习笔记_01——基础
Rust学习笔记_02——数组
Rust学习笔记_03——元组
文章目录
- Rust学习笔记_03——元组
- 元组
- 1. 定义元祖
- 2. 访问元组中的元素
- 3. 元组的解构
- 4. 元组不可遍历和切片
- 5. 元组作为函数返回值
- 6. 单元元组
- 7. 代码演示
元组
在Rust编程语言中,元组(tuple)是一种固定大小的、异质的集合类型,可以包含不同类型的元素。元组在Rust中非常有用,尤其是在需要返回多个值或临时组合不同类型的数据时。
1. 定义元祖
你可以使用圆括号 () 来定义元组,并在其中用逗号 , 分隔不同的元素。
let tuple: (i32, f64, &str) = (1, 2.5, "hello");
Rust中的元组默认是不可变的(immutable),但你可以通过 mut 关键字来使其可变
let tuple_mut = (1, 2.5 'a')
tuple_mut.1 = 3.5
println!("{tuple_mut.1}")
2. 访问元组中的元素
let tuple = (1, 2.5, "hello");let first = tuple.0; // 访问第一个元素,i32 类型的 1
let second = tuple.1; // 访问第二个元素,f64 类型的 2.5
let third = tuple.2; // 访问第三个元素,字符串切片 "hello"
3. 元组的解构
let tuple = (1, 2.5, "hello");// 解构元组
let (a, b, c) = tuple;println!("a = {}, b = {}, c = {}", a, b, c);
4. 元组不可遍历和切片
- Rust中的元组不能直接进行遍历。元组是一个固定长度的、可以包含不同类型元素的复合类型。不能使用for循环直接遍历元组,因为元组没有实现Iterator trait。
- 元组也不能像数组那样进行切片操作。只能通过索引来访问元组中的单个元素,索引从0开始,使用点号(.)来访问,例如:
tuple.0,tuple.1等。 - 如果你需要遍历或切片操作,有以下替代方案:
- 如果需要遍历,可以将元组转换为数组
- 如果元素类型相同,考虑使用数组或Vec替代元组
- 可以使用模式匹配来一次性获取多个元素
5. 元组作为函数返回值
元组可以作为函数返回值,一次返回多个值
fn calculate_area_and_perimeter(radius: f64) -> (f64, f64) {let area = 3.14159 * radius * radius;let perimeter = 2.0 * 3.14159 * radius;(area, perimeter)
}let (area, perimeter) = calculate_area_and_perimeter(5.0);
println!("Area: {}, Perimeter: {}", area, perimeter);
6. 单元元组
单元元组是只有一个空元素的元组,写作 ()。它有时用于表示一个空的结果或状态。单元元组在类型上不同于空元组 ()(后者没有类型),单元元组的类型是 ()(注意这里的圆括号与空元组的圆括号含义不同,单元元组的类型 () 在类型系统中是有效的)。
7. 代码演示
fn tuple_demo() {// 创建不可变元组let tup_1 = (500, 6.4, 1);let tup_2: (char, char, char, u32) = ('a', 'b', 'c', 10000);// 创建可变元组let mut tup_3 = (500, 6.4, 1);// 修改元组中第二个元素的值,从1改为2tup_3.1 = 2.0;// 打印元组的值println!("tup_1: {}, {}, {}", tup_1.0, tup_1.1, tup_1.2);println!("tup_2: {}, {}, {}, {}", tup_2.0, tup_2.1, tup_2.2, tup_2.3);println!("tup_3: {}, {}, {}", tup_3.0, tup_3.1, tup_3.2);// 元组访问示例let tuple = (1, "hello", 3.14);println!("First element: {}", tuple.0);println!("Second element: {}", tuple.1);println!("Third element: {}", tuple.2);//元组不能像数组一样进行遍历和切面// 使用match语句来处理元组match tup_1 {(x, y, z) => println!("x: {}, y: {}, z: {}", x, y, z),}let tuple = (1, "apple");match tuple {(1, "apple") => println!("Matched (1, \"apple\")"),(2, _) => println!("Matched (2, _)"), // _ 是一个通配符,匹配任意值(_, "banana") => println!("Matched (_, \"banana\")"), // 第一个元素可以是任意值_ => println!("Matched something else"), // 匹配所有其他情况}// 使用模式匹配解构元组let (x, y, z) = tuple;println!("x: {}, y: {}, z: {}", x, y, z);// 如果需要遍历,可以转换为数组(要求元素类型相同)let homogeneous_tuple = (1, 2, 3, 4, 5);let array = [homogeneous_tuple.0, homogeneous_tuple.1, homogeneous_tuple.2, homogeneous_tuple.3, homogeneous_tuple.4];// 现在可以遍历数组了for item in array.iter() {println!("Item: {}", item);}
}
相关文章:
Rust学习笔记_03——元组
Rust学习笔记_01——基础 Rust学习笔记_02——数组 Rust学习笔记_03——元组 文章目录 Rust学习笔记_03——元组元组1. 定义元祖2. 访问元组中的元素3. 元组的解构4. 元组不可遍历和切片5. 元组作为函数返回值6. 单元元组7. 代码演示 元组 在Rust编程语言中,元组&a…...
LabVIEW内燃机气道试验台测控系统
基于LabVIEW软件开发的内燃机气道试验台测控系统主要应用于内燃机气道的性能测试和数据分析,通过高精度的测控技术,有效提升内燃机的测试精度和数据处理能力。 项目背景 随着内燃机技术的发展,对其气道性能的精准测量需求日益增加。该系统通…...
git 本地同步远端分支
一、关联远程仓库 本地仓库关联远端仓库 git remote add origin https://github.com/user/repository.git 二、获取远程分支信息 获取远程仓库的最新分支信息 git fetch origin 三、创建或切换到本地分支以跟踪远程分支 1. 创建分支 创建分支并关联到远端分支 git bra…...
用Pycharm安装manim
由于版本和工具的差异,manim的安装方式不尽相同。本文用Pycharm来安装manim. 一、准备工作:安装相应版本的python、pycharm和ffmpeg. 此处提供一种安装ffmpeg的方式 下载地址:FFmpeg 下载后,解压到指定目录。 配置环境变量&am…...
#渗透测试#红蓝攻防#HW#漏洞挖掘#漏洞复现01-笑脸漏洞(vsftpd)
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
vue3项目中使用星火API
在node环境epxress中使用讯飞ai接口进行二次封装,通过ai对话回复提取,获得ai提取的文章摘要 本文章只是简单使用,更复杂功能比如调用星火API制作对话机器人可以查看文档,对于初次使用星火AI接口或许有帮助 讯飞星火大模型API-大模…...
digit_eye开发记录(3): C语言读取MNIST数据集
在前两篇,我们解读了 MNIST 数据集的 IDX 文件格式,并分别用 C 和 Python 做了 读取 MNIST 数据集的实现。 基于 C 的代码稍长,基于 Python 的代码则明显更短,然而它们的共同特点是:依赖了外部库: 基于 C …...
【linux】(23)对象存储服务-MinIo
MinIO 是一个高性能的对象存储服务,兼容 Amazon S3 API。 Docker安装MinIo 前提条件 确保您的系统已经安装了 Docker。如果还没有安装 Docker,可以参考 Docker 官方文档进行安装。 1. 拉取 MinIO Docker 镜像 首先,从 Docker Hub 拉取 Mi…...
如何使用Python解析从淘宝API接口获取到的JSON数据?
基本的 JSON 解析 当从淘宝 API 接口获取到数据后(假设数据存储在变量response_data中),首先要判断数据类型是否为 JSON。如果是,就可以使用 Python 内置的json模块进行解析。示例代码如下: import json # 假设respon…...
C# 2024年Visual Studio实用插件集合
在2024年,Visual Studio作为.NET开发者的首选IDE,其插件生态不断壮大,为开发者提供了更高效、便捷的开发体验。本文将介绍一些实用的Visual Studio插件,特别是针对C#开发者,帮助提升开发效率和代码质量。 1. GitHub C…...
Matlab Simulink HDL Coder开发流程(一)— 创建HDL兼容的Simulink模型
创建HDL兼容的Simulink模型 一、使用Balnk DUT模板二、从HDL Coder库中选择模块三、为DUT开发算法/功能四、为设计创建Testbench五、仿真验证设计功能六、Simulink模型生成HDL代码 这个例子说明了如何创建一个用于生成HDL代码的Simulink模型。要创建兼容HDL代码生成的MATLAB算法…...
详解Qt pdf 之QPdfSelection 选择文本类
文章目录 QPdfSelection 类详解前言 详细说明公共函数说明1. 构造函数2. text3. boundingRect4. isEmpty5. startPage6. endPage 使用场景示例代码代码说明总结 QPdfSelection 类详解 前言 QPdfSelection 是 Qt PDF 模块中的一个类,用于表示在 PDF 文档中被选中的…...
docker中redis查看key、删除key
查看docker启动的进程 docker ps这个命令会列出所有正在运行的容器,包括容器的 ID、镜像名称、创建时间、状态、端口映射和名称 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1a2b3c4d5e6…...
【MySQL — 数据库基础】MySQL的安装与配置 & 数据库简单介绍
数据库基础 本节目标 掌握关系型数据库,数据库的作用掌握在Windows和Linux系统下安装MySQL数据库了解客户端工具的基本使用和SQL分类了解MySQL架构和存储引擎 1. 数据库的安装与配置 1.1 确认MYSQL版本 处理无法在 cmd 中使用 mysql 命令的情况&a…...
ehr系统建设方案,人力资源功能模块主要分为哪些,hrm平台实际案例源码,springboot人力资源系统,vue,JAVA语言hr系统(源码)
eHR人力资源管理系统:功能强大的人力资源管理工具 随着企业规模的不断扩大和业务需求的多样化,传统的人力资源管理模式已无法满足现代企业的需求。eHR人力资源管理系统作为一种先进的管理工具,能够为企业提供高效、准确、实时的人力资源管理。…...
【解决安全扫描漏洞】---- 检测到目标站点存在 JavaScript 框架库漏洞
1. 漏洞结果 JavaScript 框架或库是一组能轻松生成跨浏览器兼容的 JavaScript 代码的工具和函数。如果网站使用了存在漏洞的 JavaScript 框架或库,攻击者就可以利用此漏洞来劫持用户浏览器,进行挂马、XSS、Cookie劫持等攻击。 1.1 漏洞扫描截图 1.2 具体…...
flink学习(12)——checkPoint
如何设置checkPoint package com.bigdata.day06;/** * 1、需要三句话 * 2、设置完checkPoint后若程序出现异常,会一直重启 * 3、此时是自动进行checkPoint保存 * 4、注意:此时如果有checkpoint ,是不会出现异常的,需要将checkpoint的代码关…...
【iOS】《Effective Objective-C 2.0》阅读笔记(一)
文章目录 前言了解OC语言的起源在类的头文件中尽量少引入其他头文件多用字面量语法,少用与之等价的方法字面量数值字面量数组字面量字典 多用类型常量,少用#define预处理指令用枚举法表示状态、选项、状态码 总结 前言 最近开始阅读一些iOS开发的相关书籍…...
LVS 负载均衡面试题及参考答案
目录 什么是 LVS 负载均衡?它的主要作用是什么? 为什么要使用 LVS 进行负载均衡? LVS 有哪些组成部分? 简述 LVS 的架构。 LVS 中有哪两种典型的架构?请简要说明它们的特点。 LVS 的工作原理是怎样的?简述 LVS 的工作原理。 解释 LVS 中的虚拟服务器(VS)概念。 …...
北京科博会 天云数据CEO雷涛谈人工智能技术服务数字资产建设
7月13日,第二十六届中国北京国际科技产业博览会(简称北京科博会)在国家会议中心开幕。本届科博会年度主题为“实施创新驱动发展战略 增强高质量发展动能”。会上,天云数据CEO雷涛发表《人工智能技术服务数字资产建设》主题演讲。 近期非常引人注目的事件…...
苹果内购订阅的“时间陷阱”:如何正确处理UTC与东八区的时间转换(附Java代码)
苹果订阅时间戳的时区陷阱:UTC与东八区转换的实战指南 1. 为什么时间戳处理如此重要? 在苹果应用内购(IAP)订阅系统中,时间戳处理看似简单,实则暗藏玄机。许多开发者都曾踩过这样的坑:用户明明购…...
LazyVim终极指南:如何快速打造你的Neovim梦幻开发环境
LazyVim终极指南:如何快速打造你的Neovim梦幻开发环境 【免费下载链接】LazyVim Neovim懒人配置。 项目地址: https://gitcode.com/GitHub_Trending/la/LazyVim 你是否曾经因为Neovim配置的复杂性而望而却步?是否尝试过各种配置方案却始终找不到那…...
Fortran开发环境配置2024实践指南
Fortran开发环境配置2024实践指南 【免费下载链接】vscode-fortran-support Fortran language support for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-fortran-support 在科学计算与工程领域,Fortran语言依然保持着不可替代的…...
Vue 3 响应式系统的解构艺术:深入剖析 toRef 与 toRefs
Vue 3 响应式系统的解构艺术:深入剖析 toRef 与 toRefs 在 Vue 3 的 Composition API 中,响应式系统是其核心魅力之一。ref 和 reactive 为我们提供了强大的数据响应能力,但在实际开发中,尤其是在复杂的组件逻辑和组合式函数&…...
5分钟掌握游戏高清截图秘诀:SRWE窗口分辨率自定义完整教程
5分钟掌握游戏高清截图秘诀:SRWE窗口分辨率自定义完整教程 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾梦想为心爱的游戏角色拍摄一张高清壁纸,却发现游戏分辨率选项有限&…...
别再让时钟信号‘跑偏’了!手把手教你理解ADC中DCC电路的设计要点
高速ADC设计中的时钟占空比校正实战指南 时钟信号就像ADC系统的心跳,每一次跳动都决定着数据采样的精准度。当这个"心跳"变得不规律时,整个系统的性能就会大打折扣。在高速ADC设计中,时钟占空比失真是一个常见却又容易被忽视的问题…...
气象数据可视化必看:ERA5降水资料从m转mm的3种场景解决方案
气象数据可视化实战:ERA5降水资料单位换算与场景化应用指南 当你在深夜的实验室里盯着屏幕上那一串以"m"为单位的降水数据时,是否曾困惑过如何将它们转化为更符合学术惯例的"mm"?作为处理过数百个气象数据集的老手&#…...
【FreeRTOS实战入门】一、从CubeMX到第一个任务:手把手搭建FreeRTOS工程
1. 为什么选择FreeRTOS与CubeMX组合 第一次接触嵌入式实时操作系统时,很多人会纠结选择哪种RTOS。我当年在uC/OS-II和FreeRTOS之间犹豫了很久,最终选择了后者。原因很简单:FreeRTOS不仅完全免费开源,还有STM32CubeMX这个神器加持。…...
用极空间 NAS 搭专属博客:Typecho 部署全攻略,把创作握在自己手里
前言 作为常年折腾各类私有部署工具的科技爱好者,我一直觉得「真正的创作自由」,藏在自己能掌控的服务器里。试过不少博客程序,要么配置繁琐,要么资源占用高,直到把 Typecho 和极空间 NAS 结合,才找到最舒…...
DownKyi架构深度解析:高效B站视频下载工具的技术实现与实战指南
DownKyi架构深度解析:高效B站视频下载工具的技术实现与实战指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印…...
