Array
ในภาษา Rust โครงสร้างข้อมูลแบบ Array จะมีความคล้ายคลึงกับ Array ในภาษา C หรือ C++ โดยมีข้อจำกัดดังต่อไปนี้:
- ขนาดคงที่: เมื่อสร้างแล้วไม่สามารถเพิ่มหรือลดขนาดได้
- ชนิดข้อมูลเดียวกัน: ข้อมูลที่เก็บต้องเป็นประเภทเดียวกันทั้งหมด
ตัวอย่างการใช้งาน Array
fn main() { let mut arr: [i32; 3] = [0, 0, 0]; arr[1] = 5; let a = arr[1]; println!("{:?}", arr); println!("{}", arr[0]); println!("{}", a); }
คำถามให้ลองทำ
- หากประกาศ
let arr = [0; 3];
ผลลัพธ์จะเป็นอะไร?- จะประกาศ array ขนาด 10,000 ที่มีแต่
'A'
ได้อย่างไร
Tuple
Tuple ในภาษา Rust มีความคล้ายคลึงกับ Array แต่มีข้อแตกต่างที่ Tuple สามารถเก็บข้อมูลที่มีชนิดต่างกันได้
ตัวอย่างการใช้งาน Tuple
fn main() { let mut t:(u8, f64, char) = (1, 1.0, '1'); t.0 = 2; t.1 = 3.3; t.2 = '5'; let c = t.2; let (a, b, _) = t; println!("{:?}", t); }
Vector
Vector คือโครงสร้างข้อมูลแบบ Array ที่สามารถเพิ่มหรือลดขนาดได้ เนื่องจากถูกเก็บอยู่ใน Heap Memory
note
การที่ข้อมูลถูกเก็บไว้ใน Heap ทำให้สามารถขจัดข้อจำกัดเรื่องขนาดได้ แต่มีผลกระทบต่อประสิทธิภาพเมื่อเทียบกับข้อมูลที่เก็บอยู่ใน Stack
note
vec![]
คือ macro ที่ใช้สำหรับสร้าง Vector
ตัวอย่างการใช้งาน
fn main() { let mut a = vec![0; 10]; a.push(1); println!("{}", a[10]); println!("{:?}", a); a.pop(); println!("{:?}", a); }
ลองแก้โค้ดดู
- ลองประกาศ Array ของเลข 0 ทั้งหมด 10 ล้านตัวว่าจะเกิดอะไรขึ้น
- ลองเปลี่ยนเป็นประกาศ Vector ของเลข 0 ทั้งหมด 10 ล้านตัว
note
ในภาษา Rust สามารถใช้ _
คั่นตัวเลขได้ เช่น let i:i32 = 10_000_000;
Slice
Slice เป็นการอ้างอิงถึงส่วนหนึ่งของข้อมูลที่มีอยู่แล้ว ซึ่งช่วยให้การเข้าถึงข้อมูลมีประสิทธิภาพและใช้หน่วยความจำน้อยลง เนื่องจากไม่ต้องทำการคัดลอกข้อมูล
note
ในภาษา JavaScript การใช้ .slice()
จะเป็นการคัดลอกข้อมูล
ตัวอย่างการใช้ Slice
fn main() { let s:&str = "Hello World"; let string:String = s.to_string(); let slice:&str = &string[..5]; let arr:[i32;5] = [1, 2, 3, 4, 5]; let arr_slice:&[i32] = &arr[1..4]; println!("{}", slice); println!("{:?}", arr_slice); }