阅读初学者指南后,我唯一能发现的真正区别是,在元组中可以具有多个类型的值?两者都是一成不变的?
除了明显的元组或数组外,还有哪些用例?
答案 0 :(得分:2)
您可以按数组名称,方括号和索引来访问数组元素,例如:
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);
Tuples可用于从函数返回多个值,例如:
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);
有用的资源
答案 1 :(得分:1)
数组是同类类型的项目的列表。您可以对其进行迭代,并使用动态索引对其进行索引或切片。它应该用于在代码中扮演相同角色的项目的本地集合。通常,您将在代码中至少对数组进行一次迭代。
元组是异构项的固定长度的聚集。应该将其视为具有匿名字段的struct
。这些字段在代码中通常具有不同的含义,您无法对其进行迭代。
答案 2 :(得分:0)
故事:
.
语法为第一个元素建立索引,例如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]
}