12月 23, 2023 LaGee
元組(Tuple)、數組(Array)、結構(struct)差別
Rust儲存數據方法有三種
分別是元組(tuple)、數組(Array)、結構(struct)
而數組分為兩種
一種是靜態數組(Array)
另一種是動態數組(Vector)
元組是一個集合
集合裡面可以放不同的形態(type)
例如
fn main() {
let data: (i32, f64, bool, &str, String)
= (0, 1.0, true, "abc", "String".to_string());
println!("{}", data.0);
println!("{}", data.1);
println!("{}", data.2);
println!("{}", data.3);
println!("{}", data.4);
}
0
1
true
abc
String
數組
數組的特色就是整個數據型態都會一樣
數組分為兩個
一個是靜態數組
另一個是動態數組
靜態數組指的是不能增加它的大小
他所有的數據型態是固定的
總量也是固定的
fn main() {
let data: [i32;5] = [0, 1, 2, 3, 4];
println!("{}", data[0]);
println!("{}", data[1]);
println!("{}", data[2]);
println!("{}", data[3]);
println!("{}", data[4]);
}
0
1
2
3
4
動態數組則是可以對他裡面的內容刪減
最簡單就是push可以增加一個數據
fn main() {
let mut data: Vec<i32>= vec![0, 1, 2, 3, 4];
println!("{}", data[0]);
println!("{}", data[1]);
println!("{}", data[2]);
println!("{}", data[3]);
println!("{}", data[4]);
data.push(5);
println!("{}", data[5]);
}
0
1
2
3
4
5
元組和數組比較
兩個差別就是型態
元組裡面元素型態不一定要一樣
而數組則是要一定
如果是和靜態數組比較
他們都一樣不能增減數據
但與其使用元組
我會比較偏向使用結構
因為使用元組的時候
要記得data.0 data.1 data.2是什麼數據
有時候數據比較長就會忘記
而結構則是可以取名字
例如
struct Data {
row: u8,
col: u8,
}
fn main() {
let data = Data{
row: 0,
col: 1,
};
println!("{}", data.row);
println!("{}", data.col);
}
0
1
我創建一個名為Data的結構
裡面有兩個數據 row和col
現在只有兩個可能會很好記,使用元組和結構可能差異不大
但如果像這個很長一條
#[derive(Debug)]
enum Semester {
First,
Second,
Third,
Forth,
}
#[derive(Debug)]
struct Score {
semester: Semester,
name: String,
subject: String,
score: Vec<u8>,
average: f32,
bouns: bool,
flunk: bool,
comments: String,
}
fn main() {
let data = Score {
semester: Semester::First,
subject: String::from("Chinese"),
score: vec![10, 20, 30],
average: 20.0,
bouns: false,
flunk: true,
comments: String::from("He is a good student. But see you next year."),
name: String::from("Lagee")
};
println!("{}", data.name);
println!("{:#?}", data);
}
整個結構出現學期、名字、科目、分數、平均、是否加分、是否當掉、評語
甚至用上了枚舉(Enum[5])
在這種情況下使用元組就會忘記每個位置是什麼
但結構甚至可以忘記添加資料時
就像程式碼最後才補上name
而輸出只需要打後面名字,不用記位置
結構也會自動整理
Lagee
Score {
semester: First,
name: "Lagee",
subject: "Chinese",
score: [
10,
20,
30,
],
average: 20.0,
bouns: false,
flunk: true,
comments: "He is a good student. But see you next year.",
}
整個輸出就一目了然
總結
- 相較於使用元組,我更喜歡用結構,因結構可以對每個元素命名,以方便存取使用
參考資料
[1] https://doc.rust-lang.org/rust-by-example/primitives/tuples.html
[2] https://doc.rust-lang.org/std/primitive.array.html
[3] https://doc.rust-lang.org/std/vec/struct.Vec.html
[4] https://doc.rust-lang.org/book/ch05-01-defining-structs.html
[5] https://doc.rust-lang.org/book/ch06-01-defining-an-enum.html
0 comments:
張貼留言