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.0tuple.1等。
  • 如果你需要遍历或切片操作,有以下替代方案:
    1. 如果需要遍历,可以将元组转换为数组
    2. 如果元素类型相同,考虑使用数组或Vec替代元组
    3. 可以使用模式匹配来一次性获取多个元素

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);}
}

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

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

相关文章

mini-spring源码分析

IOC模块 关键解释 beanFactory:beanFactory是一个hashMap, key为beanName, Value为 beanDefination beanDefination: BeanDefinitionRegistry,BeanDefinition注册表接口,定义注册BeanDefinition的方法 beanReference:增加Bean…

redis学习面试

1、数据类型 string 增删改查 set key valueget keydel kstrlen k 加减 incr articleincrby article 3decr articledecyby article 取v中特定位置数据 getrange name 0 -1getrange name 0 1setrange name 0 x 设置过期时间 setex pro 10 华为 等价于 set pro 华为expire pro…

详解MVC架构与三层架构以及DO、VO、DTO、BO、PO | SpringBoot基础概念

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 今天毛毛张分享的是SpeingBoot框架学习中的一些基础概念性的东西:MVC结构、三层架构、POJO、Entity、PO、VO、DO、BO、DTO、DAO 文章目录 1.架构1.1 基本…

KST-3D01型胎儿超声仿真体模、吸声材料以及超声骨密度仪用定量试件介绍

一、KST-3D01型胎儿超声仿真体模 KST—3D01型胎儿超声体模,采用仿羊水环境中内置胎龄为7个月大仿胎儿设计。用于超声影像系统3D扫描演示装置表面轮廓呈现和3D重建。仿羊水超声影像呈暗回声(无回波)特性,仿胎儿超声影像呈对比明显…

【逐行注释】自适应Q和R的AUKF(自适应无迹卡尔曼滤波),附下载链接

文章目录 自适应Q的KF逐行注释的说明运行结果部分代码各模块解释 自适应Q的KF 自适应无迹卡尔曼滤波(Adaptive Unscented Kalman Filter,AUKF)是一种用于状态估计的滤波算法。它是基于无迹卡尔曼滤波(Unscented Kalman Filter&am…

易速鲜花聊天客服机器人的开发(上)

“聊天机器人”项目说明 聊天机器人(Chatbot)是LLM和LangChain的核心用例之一,很多人学习大语言模型,学习LangChain,就是为了开发出更好的、更能理解用户意图的聊天机器人。聊天机器人的核心特征是,它们可…

ChatGPT/AI辅助网络安全运营之-数据解压缩

在网络安全的世界中,经常会遇到各种压缩的数据,比如zip压缩,比如bzip2压缩,gzip压缩,xz压缩,7z压缩等。网络安全运营中需要对这些不同的压缩数据进行解压缩,解读其本意,本文将探索一…

05_JavaScript注释与常见输出方式

JavaScript注释与常见输出方式 JavaScript注释 源码中注释是不被引擎所解释的,它的作用是对代码进行解释。lavascript 提供两种注释的写法:一种是单行注释,用//起头:另一种是多行注释,放在/*和*/之间。 //这是单行注释/* 这是 多行 注释 *…

网络原理(一):应用层自定义协议的信息组织格式 HTTP 前置知识

目录 1. 应用层 2. 自定义协议 2.1 根据需求 > 明确传输信息 2.2 约定好信息组织的格式 2.2.1 行文本 2.2.2 xml 2.2.3 json 2.2.4 protobuf 3. HTTP 协议 3.1 特点 4. 抓包工具 1. 应用层 在前面的博客中, 我们了解了 TCP/IP 五层协议模型: 应用层传输层网络层…

题目 3209: 蓝桥杯2024年第十五届省赛真题-好数

一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位 )上的数字是奇数,偶数位(十位、千位、十万位 )上的数字是偶数,我们就称之为“好数”。给定一个正整数 N,请计算从…

数据结构与算法学习笔记----KMP

数据结构与算法学习笔记----KMP author: 明月清了个风 last edited: 2024.11.24 Acwing 831. KMP字符串 给定一个字符串 S S S,以及一个模式串 P P P,所有字符串中只包含大小写英文字母以及阿拉伯数字。 模式串 P P P在字符串 S S S中多次作为子串出…

算法基础 - 二分迭代法求解非线性方程

文章目录 1. 基本思想2. 编程实现2.1. 非递归2.2. 递归方案 3. 总结 二分迭代法使用了二分算法思想求解非线性方程式。 下面要求使用二分迭代法求解: 2x3-5x-10 方程式,且要求误差不能大于10e-5。 二分迭代法也只是近似求解算法。 所谓求解&#xff…

家校通小程序实战教程03学生管理

目录 1 创建数据源2 搭建后台功能3 设置主列字段4 批量导入数据5 设置查询条件6 实现查询和重置总结 我们现在已经搭建了班级管理,并且录入了班级口令。之后就是加入班级的功能了。这里分为老师加入班级和学生家长加入班级。 如果是学生家长的话,在加入之…

springboot336社区物资交易互助平台pf(论文+源码)_kaic

毕 业 设 计(论 文) 社区物资交易互助平台设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此&#xff…

【C++】7000字介绍map容器和set容器的功能和使用

目录 一、关联式容器和序列式容器 二、键值对,> 三、树形结构的关联式容器 四、set容器(key模型) 1、文档官网 2、功能介绍: 3、注意事项: 4、基本使用,更多接口可查看官网: (1&…

嵌入式C语言技巧15:深入浅出:多线程编程中锁的选择与优化策略

文章目录 导读一、锁机制概览二、实战演练:锁的选择与使用三、代码执行结果与分析四、总结与展望本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观…

【Git】常用命令汇总

目录 一.安装及配置 1.在 Windows 上安装 2.用户信息 3.差异分析工具 二.基础 1.创建仓库 2.提交与修改 三.分支管理 1.创建分支 2.合并分支 四.远程操作 1.管理 Git 仓库中的远程仓库 2.数据的获取与推送 五.标签 1.创建轻量标签和附注标签 2.查看标签和标签信…

AWS海外注册域名是否需要实名认证?

在全球化的互联网环境中,注册域名已成为企业和个人建立在线存在的重要步骤。亚马逊网络服务(AWS)作为全球领先的云服务提供商,其域名注册服务也备受关注。然而,对于在AWS上注册海外域名是否需要实名认证,许…

【C++进阶篇】像传承家族宝藏一样理解C++继承

文章目录 须知 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗&#xff1…

DAMODEL丹摩|部署FLUX.1+ComfyUI实战教程

本文仅做测评体验,非广告。 文章目录 1. FLUX.1简介2. 实战2. 1 创建资源2. 1 ComfyUI的部署操作2. 3 部署FLUX.1 3. 测试5. 释放资源4. 结语 1. FLUX.1简介 FLUX.1是由黑森林实验室(Black Forest Labs)开发的开源AI图像生成模型。它拥有12…