Rust 除了基本型別以外,也有複合型別哦
讓我們來看一下複合型別有哪些
顧名思義就是陣列啦!也是由 [] 包起來
讓我們來看看吧
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']
陣列中每個元素的型態可以不用明確定義
不過要請注意 {}
要改成 {:?}
這個型態蠻特別的,是指切片的意思
可能會擷取 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 的型態可以存許多種型態,在命名時就必須明確指定型態
我們來看一下他長怎麼樣吧
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 比較像是 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
看了這麼多型態,我們來稍微比較一下吧!