【Rust练习】10.元组

2024-08-25 16:44
文章标签 rust 练习 元组

本文主要是介绍【Rust练习】10.元组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

练习题来自:https://practice-zh.course.rs/compound-types/tuple.html

1 元组中的元素可以是不同的类型。元组的类型签名是 (T1, T2, …), 这里 T1, T2 是相对应的元组成员的类型.

fn main() {let _t0: (u8,i16) = (0, -1);// 元组的成员还可以是一个元组let _t1: (u8, (i16, u32)) = (0, (-1, 1));// 填空让代码工作let t: (u8, __, i64, __, __) = (1u8, 2u16, 3i64, "hello", String::from(", world"));
}

我在这里说一下我对元组的理解,这个东西类似于Cunion,也就是C++variant,这两个类型我都有文章讲过:
【C++】union
【C++】std::variant

至于这道题,很简答,写出对应的类型就行:

fn main() {let _t0: (u8,i16) = (0, -1);// 元组的成员还可以是一个元组let _t1: (u8, (i16, u32)) = (0, (-1, 1));// 填空让代码工作let t: (u8, u16, i64, &str, String) = (1u8, 2u16, 3i64, "hello", String::from(", world"));
}

2 🌟 可以使用索引来获取元组的成员

// 修改合适的地方,让代码工作
fn main() {let t = ("i", "am", "sunface");assert_eq!(t.1, "sunface");
}

surface是第三个,索引是2

fn main() {let t = ("i", "am", "sunface");assert_eq!(t.2, "sunface");
}

3 🌟 过长的元组无法被打印输出

// 修复代码错误
fn main() {let too_long_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);println!("too long tuple: {:?}", too_long_tuple);
}

目前仅仅为大小不超过 12 的元组实现了 Debug,更长的元组未实现(而且可能永远无法实现了)。

fn main() {let too_long_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);let sup: (i32, i32) = (12, 13);println!("too long tuple: {:?} {:?}", too_long_tuple, sup);
}

4 使用模式匹配来解构元组

fn main() {let tup = (1, 6.4, "hello");// 填空let __ = tup;assert_eq!(x, 1);assert_eq!(y, "hello");assert_eq!(z, 6.4);
}

其实就是给对应位置的参数起个别名。

fn main() {let tup = (1, 6.4, "hello");// 填空let (x, z, y) = tup;assert_eq!(x, 1);assert_eq!(y, "hello");assert_eq!(z, 6.4);
}

5 🌟🌟 解构式赋值

fn main() {let (x, y, z);// 填空__ = (1, 2, 3);assert_eq!(x, 3);assert_eq!(y, 1);assert_eq!(z, 2);
}

同上

fn main() {let (x, y, z);// 填空(y, z, x) = (1, 2, 3);assert_eq!(x, 3);assert_eq!(y, 1);assert_eq!(z, 2);
}

6 🌟🌟 元组可以用于函数的参数和返回值

fn main() {// 填空,需要稍微计算下let (x, y) = sum_multiply(__);assert_eq!(x, 5);assert_eq!(y, 6);
}fn sum_multiply(nums: (i32, i32)) -> (i32, i32) {(nums.0 + nums.1, nums.0 * nums.1)
}
fn main() {// 填空,需要稍微计算下let (x, y) = sum_multiply((2, 3));assert_eq!(x, 5);assert_eq!(y, 6);
}fn sum_multiply(nums: (i32, i32)) -> (i32, i32) {(nums.0 + nums.1, nums.0 * nums.1)
}

这篇关于【Rust练习】10.元组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106093

相关文章

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、