iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0

Rust 除了基本型別以外,也有複合型別哦

讓我們來看一下複合型別有哪些

Array

顧名思義就是陣列啦!也是由 [] 包起來
讓我們來看看吧

fn main() {
    let alphabet: [char; 3] = ['A', 'B', 'C'];
    let alphabet_array = ['A', 'B', 'C'];

    println!("{:?}", alphabet);
    println!("{:?}", alphabet_array)
}

結果:
['A', 'B', 'C']
['A', 'B', 'C']

陣列中每個元素的型態可以不用明確定義

不過要請注意 {} 要改成 {:?}

Slice

這個型態蠻特別的,是指切片的意思
可能會擷取 Array 的一部分

舉例來說

fn main() {
    let alphabet: [char; 3] = ['A', 'B', 'C'];
    let last_alphabet_slice = &alphabet[..1];
    let without_first_alphabet_slice = &alphabet[1..];
    let one_slice = &alphabet[1];

    println!("{:?}", last_alphabet_slice);
    println!("{:?}", without_first_alphabet_slice);
    println!("{:?}", one_slice)
}

讓我們來解讀一下切片這個型態

[..1] 指的是從最前面的到 index 為 1 的陣列切片,不包含 index 1 的值
[1..] 指的是從 index 為 1 到最後的切片型態,包含 index 1 的值
[1] 指的是要抓 index 為 1 的值

['A']
['B', 'C']
'B'

如果我們的切片可能會更改,那就必須加上 &mut
不過原陣列也必須要加上 mut 才可以喔!

fn main() {
    let mut alphabet: [char; 3] = ['A', 'B', 'C'];
    let last_alphabet_slice = &alphabet[..1];

    println!("{:?}", last_alphabet_slice);
}
結果:
['A']
['D']

Tuple

Tuple 的型態可以存許多種型態,在命名時就必須明確指定型態

我們來看一下他長怎麼樣吧

fn main() {
    let ning_information: (&str, &str, &str) = ("Ning", "0912121222", "Taipei");

    println!("{:?}", ning_information);
}
結果:
("Ning", "0912121222", "Taipei")

當我們要存取裡面其中一個值,該怎麼做存取呢?
在這之前先跟大家提一下, Tuple 的 index 也是跟 Array 一樣
從 0 開始的哦

存取的話用 . 加上 index 值 就可以了

fn main() {
    let ning_information = ("Ning", "0912121222", "Taipei");

    println!("user name = {:?}", ning_information.0);
}
結果:
user name = "Ning"

如果要修改值怎麼辦,加上 mut 就可以了

fn main() {
    let mut ning_information = ("Ning", "0912121222", "Taipei");

    ning_information.2 = "Taichung";

    println!("user lives in {:?}", ning_information.2);
}
結果:
user lives in "Taichung"

Struct

Struct 比較像是 Hash ,有 key 跟 value 之分

我們可以先訂出 Struct 的架構及 value 型別

然後將變數指向已經塞入資料的 Struct

fn main() {
    struct User {
        name: String,
        age: u8,
    }

    let ning = User {
        name: String::from("Ning"),
        age: 18,
    };

    println!("user's name is {:?} and age is {:?}", ning.name, ning.age);
}
結果:
user's name is "Ning" and age is 18

看了這麼多型態,我們來稍微比較一下吧!

https://ithelp.ithome.com.tw/upload/images/20230920/20150947ETtUO7cGml.jpg


上一篇
Day 04 流程控制
下一篇
Day 06 Function 跟 Block
系列文
成為程式界的 F1 賽車手,用 30 天認識 Rust 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言