
- Rust 教程
- Rust - 首頁
- Rust - 簡介
- Rust - 環境搭建
- Rust - HelloWorld 例子
- Rust - 資料型別
- Rust - 變數
- Rust - 常量
- Rust - 字串
- Rust - 運算子
- Rust - 決策
- Rust - 迴圈
- Rust - 函式
- Rust - 元組
- Rust - 陣列
- Rust - 所有權
- Rust - 借用
- Rust - 切片
- Rust - 結構體
- Rust - 列舉
- Rust - 模組
- Rust - 集合
- Rust - 錯誤處理
- Rust - 泛型
- Rust - 輸入輸出
- Rust - 檔案輸入/輸出
- Rust - 包管理器
- Rust - 迭代器和閉包
- Rust - 智慧指標
- Rust - 併發
- Rust 有用資源
- Rust - 快速指南
- Rust - 有用資源
- Rust - 討論
Rust - 陣列
在本章中,我們將學習陣列以及與之相關的各種功能。在學習陣列之前,讓我們看看陣列與變數有何不同。
變數具有以下限制:
變數本質上是標量的。換句話說,變數宣告一次只能包含一個值。這意味著要在一個程式中儲存 n 個值,需要 n 個變數宣告。因此,當需要儲存大量值時,使用變數不可行。
程式中的變數以隨機順序分配記憶體,從而難以按宣告順序檢索/讀取值。
陣列是同構的值集合。簡單來說,陣列是相同資料型別的值的集合。
陣列的特性
陣列的特性如下所示:
陣列宣告分配連續的記憶體塊。
陣列是靜態的。這意味著一旦初始化,陣列就無法調整大小。
每個記憶體塊代表一個數組元素。
陣列元素由一個唯一的整數標識,該整數稱為元素的下標/索引。
填充陣列元素稱為陣列初始化。
陣列元素的值可以更新或修改,但不能刪除。
宣告和初始化陣列
使用下面給出的語法在 Rust 中宣告和初始化陣列。
語法
//Syntax1 let variable_name = [value1,value2,value3]; //Syntax2 let variable_name:[dataType;size] = [value1,value2,value3]; //Syntax3 let variable_name:[dataType;size] = [default_value_for_elements,size];
在第一個語法中,陣列的型別在初始化期間從陣列第一個元素的資料型別推斷得出。
示例:簡單陣列
以下示例顯式指定了陣列的大小和資料型別。println!() 函式的{:?}語法用於列印陣列中的所有值。len()函式用於計算陣列的大小。
fn main(){ let arr:[i32;4] = [10,20,30,40]; println!("array is {:?}",arr); println!("array size is :{}",arr.len()); }
輸出
array is [10, 20, 30, 40] array size is :4
示例:沒有資料型別的陣列
以下程式聲明瞭一個包含 4 個元素的陣列。在變數宣告期間沒有顯式指定資料型別。在這種情況下,陣列將為整數型別。len()函式用於計算陣列的大小。
fn main(){ let arr = [10,20,30,40]; println!("array is {:?}",arr); println!("array size is :{}",arr.len()); }
輸出
array is [10, 20, 30, 40] array size is :4
示例:預設值
以下示例建立一個數組並將其所有元素初始化為-1的預設值。
fn main() { let arr:[i32;4] = [-1;4]; println!("array is {:?}",arr); println!("array size is :{}",arr.len()); }
輸出
array is [-1, -1, -1, -1] array size is :4
示例:使用 for 迴圈的陣列
以下示例遍歷陣列並列印索引及其對應值。迴圈從索引 0 到 4(最後一個數組元素的索引)檢索值。
fn main(){ let arr:[i32;4] = [10,20,30,40]; println!("array is {:?}",arr); println!("array size is :{}",arr.len()); for index in 0..4 { println!("index is: {} & value is : {}",index,arr[index]); } }
輸出
array is [10, 20, 30, 40] array size is :4 index is: 0 & value is : 10 index is: 1 & value is : 20 index is: 2 & value is : 30 index is: 3 & value is : 40
示例:使用 iter() 函式
iter()函式獲取陣列中所有元素的值。
fn main(){ let arr:[i32;4] = [10,20,30,40]; println!("array is {:?}",arr); println!("array size is :{}",arr.len()); for val in arr.iter(){ println!("value is :{}",val); } }
輸出
array is [10, 20, 30, 40] array size is :4 value is :10 value is :20 value is :30 value is :40
示例:可變陣列
mut關鍵字可用於宣告可變陣列。以下示例聲明瞭一個可變陣列並修改了第二個陣列元素的值。
fn main(){ let mut arr:[i32;4] = [10,20,30,40]; arr[1] = 0; println!("{:?}",arr); }
輸出
[10, 0, 30, 40]
將陣列作為引數傳遞給函式
陣列可以按值或按引用傳遞給函式。
示例:按值傳遞
fn main() { let arr = [10,20,30]; update(arr); print!("Inside main {:?}",arr); } fn update(mut arr:[i32;3]){ for i in 0..3 { arr[i] = 0; } println!("Inside update {:?}",arr); }
輸出
Inside update [0, 0, 0] Inside main [10, 20, 30]
示例:按引用傳遞
fn main() { let mut arr = [10,20,30]; update(&mut arr); print!("Inside main {:?}",arr); } fn update(arr:&mut [i32;3]){ for i in 0..3 { arr[i] = 0; } println!("Inside update {:?}",arr); }
輸出
Inside update [0, 0, 0] Inside main [0, 0, 0]
陣列宣告和常量
讓我們考慮下面給出的示例,以瞭解陣列宣告和常量。
fn main() { let N: usize = 20; let arr = [0; N]; //Error: non-constant used with constant print!("{}",arr[10]) }
編譯器將導致異常。這是因為陣列的長度必須在編譯時已知。這裡,變數“N”的值將在執行時確定。換句話說,變數不能用於定義陣列的大小。
但是,以下程式有效:
fn main() { const N: usize = 20; // pointer sized let arr = [0; N]; print!("{}",arr[10]) }
以 const 關鍵字為字首的識別符號的值在編譯時定義,並且在執行時不能更改。usize 是指標大小的,因此它的大小取決於您編譯程式的架構。