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

时间:2018-10-20 03:26:19

标签: rust

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

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

3 个答案:

答案 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]

}