Skip to content

Latest commit

 

History

History
87 lines (63 loc) · 3.16 KB

README.md

File metadata and controls

87 lines (63 loc) · 3.16 KB
title tags
3. Compound type
Rust
basic
wtfacademy

WTF Rust 极简入门: 复合类型扩展:元组、数组、字符串和切片

元组

元组是一个可以包含多个不同类型的值的复合类型,有着固定的长度,一旦定义,元组长度就不能再增长或缩小,且下标从0开始。它非常有用,当你想要从一个函数返回多个值或者将多个值组合成一个集合时。

示例代码

fn main() {
    let mixed = ("Rust", 2023, 3.14, true);
    let (lang, year, pi, status) = mixed;

    println!("Language: {}, Year: {}, PI: {}, Status: {}", lang, year, pi, status);
}

动态数组 Vector

动态数组 Vec<T> 是一种灵活的数据结构,允许在运行时动态改变大小。所以它的长度是可变的,可以根据需要动态增加或减少元素。这为处理不确定数量的数据提供了便利,比如读取未知数量的用户输入或动态生成数据集。 动态数组采用了范型参数 T,意味它可以存储任意类型的值,比如我们上节讲到的整数、字符、浮点等,但是一旦确定了具体的类型,数组中的所有元素都具有同样的类型

示例代码

fn main() {
    // 1.显式声明动态数组类型
    let mut v1: Vec<i32> = Vec::new();
    v1.push(1);
    v1.push(2);
    v1.push(3);
    println!("vector v1: {:?}", &v1);

    // 2.使用宏 vec! 来创建数组,支持在创建时就给予初始化值
    let v2 = vec![1u8, 2, 3];  
    println!("vector v2: {:?}", &v2);
}

字符串和切片

字符串是一种非常常见的复合类型,用于存储文本。在Rust中,有两种主要的字符串类型:String 和字符串切片 &str

创建和使用字符串

fn main() {
    let mut s = String::from("Hello"); // 可变的 String 类型
    s.push_str(", world!"); // 修改String
    println!("{}", s);

    let slice = &s[0..5]; // 获取部分 String 作为切片
    println!("Slice: {}", slice);
}

字符串切片 &str 是对存储在某处(通常为String类型)的 UTF-8编码字符串数据的引用,在编译阶段被硬编码到程序二进制文件中,因此它们是不可变的。当你想要部分引用String中的内容或传递小量数据时,切片特别有用。

切片

切片允许你引用集合中的一段连续元素序列,而不是整个集合。它们同样适用于数组。

示例代码

fn main() {
    let numbers = [1, 2, 3, 4, 5];
    let slice = &numbers[1..4]; // 引用数组的一部分
    
    for &item in slice.iter() {
        println!("{}", item);
    }
}

在这里,slice 是一个指向 numbers 数组中三个元素的切片。切片是一种非常有用的工具,因为它允许你安全地访问数组或字符串的部分元素,而无需复制它们。

小结

通过扩展探讨元组、数组、字符串及切片,我们更全面地了解了Rust中复合类型的使用和优势。这些结构提供了处理数据和组织程序逻辑方面的灵活性和效率。希望这些示例帮助你更好地理解这些概念,并能够在你的Rust项目中有效地使用它们。