元组和rust中的数组有什么区别?

abh*_*k_M 3 rust

阅读初学者指南后,我唯一能发现的真正区别是,在元组中可以具有多个类型的值?两者都是一成不变的?

除了明显的元组或数组,还有哪些用例?

Sve*_*ach 13

数组是同构类型的项目列表。您可以迭代它并使用动态索引对其进行索引或切片。它应该用于在代码中扮演相同角色的项目的原生集合。通常,您将在代码中至少迭代一次数组。

元组是异质项的固定长度聚集。它应该被认为是struct带有匿名字段的。这些字段在代码中通常具有不同的含义,您无法对其进行迭代。


Jay*_*Jay 5

数组

  • 相同类型的值的集合
  • 固定大小的集合

访问元素

您可以通过数组名称,方括号和索引来访问数组元素,例如:

let arr = [22, 433, 55];
assert_eq!(arr[0], 22);
Run Code Online (Sandbox Code Playgroud)

销毁数组

数组可以分解为多个变量,例如:

let arr = [1, 42 ,309];
let [id, code, set] = arr;

assert_eq!(id, 1);
assert_eq!(code, 42);
assert_eq!(set, 309);
Run Code Online (Sandbox Code Playgroud)

元组

  • 不同类型的值的集合
  • 有限异质序列

访问元素

您可以通过元组的名称,点和索引来访问元组的元素,例如:

let tup = (22, "str", 55);
assert_eq!(tup.0, 22);
Run Code Online (Sandbox Code Playgroud)

功能

元组可用于从函数返回多个值,例如:

fn num(i: u32) -> (i64, u32) {
    (-33, 33 + i)
}

assert_eq!(num(12), (-33, 45));
Run Code Online (Sandbox Code Playgroud)

破坏元组

元组也可以被销毁,更常见的做法是销毁元组而不是数组,例如:

let tup = (212, "Wow", 55);
let (num, word, id) = tup;

assert_eq!(num, 212);
assert_eq!(word, "Wow");
assert_eq!(id, 55);
Run Code Online (Sandbox Code Playgroud)

有用的资源:

  • 另一方面,固定长度的数组也可以解构——这两种类型之间并没有真正的区别。不过,解构元组更为常见。 (2认同)