【发布时间】:2018-10-20 03:26:18
【问题描述】:
阅读初学者指南后,我能弄清楚的唯一真正区别是,在元组中你可以有多种类型的值吗?两者都是不可变的?
除了显而易见的用例之外,我想要一个元组或数组的用例是什么。
【问题讨论】:
标签: rust
阅读初学者指南后,我能弄清楚的唯一真正区别是,在元组中你可以有多种类型的值吗?两者都是不可变的?
除了显而易见的用例之外,我想要一个元组或数组的用例是什么。
【问题讨论】:
标签: rust
数组是同类项目的列表。您可以对其进行迭代并使用动态索引对其进行索引或切片。它应该用于在代码中扮演相同角色的项目的同类集合。通常,您将在代码中至少对数组进行一次迭代。
元组是异类项的固定长度聚合。它应该被认为是带有匿名字段的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]
}
【讨论】: