在阅读初学者指南后,我能想到的真正区别是:在元组中,你可以拥有多个类型的值? 两者都是不可变的吗?
那么,在除了显而易见的情况之外,我何时需要使用元组或数组?
在阅读初学者指南后,我能想到的真正区别是:在元组中,你可以拥有多个类型的值? 两者都是不可变的吗?
那么,在除了显而易见的情况之外,我何时需要使用元组或数组?
数组是同类型物品的列表。你可以使用动态索引遍历、索引、或切片它。它应该用于代码中扮演相同角色的同质集合。通常,在您的代码中至少需要一次迭代数组。
元组是异构项的固定长度聚合。应该将其视为带有匿名字段的struct
。在代码中,这些字段通常具有不同的含义,且无法迭代。
你可以通过数组的名称、方括号和索引来访问数组的元素,例如:
let arr = [22, 433, 55];
assert_eq!(arr[0], 22);
可以将数组解构为多个变量,例如:
let arr = [1, 42 ,309];
let [id, code, set] = arr;
assert_eq!(id, 1);
assert_eq!(code, 42);
assert_eq!(set, 309);
您可以通过元组名称、点和索引访问元组的元素,例如:
let tup = (22, "str", 55);
assert_eq!(tup.0, 22);
元组可用于从函数返回多个值,例如:
fn num(i: u32) -> (i64, u32) {
(-33, 33 + i)
}
assert_eq!(num(12), (-33, 45));
元组也可以进行解构,而且解构元组比解构数组更为常见。例如:
let tup = (212, "Wow", 55);
let (num, word, id) = tup;
assert_eq!(num, 212);
assert_eq!(word, "Wow");
assert_eq!(id, 55);
有用的资源:
元组:
.
语法进行索引,例如myTuple.0
表示第一个元素mut
关键字进行更改数组:
[]
语法进行索引,例如myArr.[0]
表示第一个元素mut
关键字进行更改示例:
在示例中,我已经显式地声明了类型,这样您就可以看到变量的类型。在您的代码中,通常可以省略它们,因为编译器会推断出它们。
fn main() {
let mut tupleA: (i32, i32, &str) = (3434, 5634, "abc");
let tupleB: (char, i32, bool) = ('d', 456, false);
let mut arrayA: [i32; 3] = [1,2,3];
let arrayB: [bool; 4] = [false, true, false, true];
tupleA.1 = 5;
arrayA[0] = 5;
println!("{:?} {:?} {:?} {:?}", tupleA, tupleB, arrayA, arrayB)
// prints (3434, 5, "abc") ('d', 456, false) [5, 2, 3] [false, true, false, true]
}