簡體   English   中英

Rust 中的元組和數組有什么區別?

[英]What is the difference between tuples and array in 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]

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM