title | tags | |||
---|---|---|---|---|
3. Compound type |
|
元组是一个可以包含多个不同类型的值的复合类型,有着固定的长度,一旦定义,元组长度就不能再增长或缩小,且下标从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);
}
动态数组 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
项目中有效地使用它们。