Array類型

Rust中的數組和其他語言中的數組不太一樣,Rust數組長度固定、元素類型相同。

數組的數據類型表示方式為[Type; N],其中:

  • Type是該數組要存儲什麼類型的數據,數組中的所有元素類型都必須是Type
  • N是數組的長度,Rust不會自動伸縮數組的長度

數組字面量使用中括號[]表示,例如[1,2,3]。還有一種特殊的表示數組字面量的方式是[val; N],這有點像數組類型的描述方式[Type; N],不過這裡表示的是該數組長度為N,並且這N個元素的值都初始化為val。

例如:

fn main(){
  // 自動推導類型為:[i32; 4]
  let _arr = [11,22,33,44];
  
  let _arr1: [&str; 3] = ["junma", "jinlong", "gaoxiao"];
  
  // 自動推導類型為:[u8; 1024]
  // 該數組初始化為1024個u8類型的0
  // 可將之當作以0填充的1K的buf空間
  let _arr2 = [0_u8; 1024]; 
}

注意,[Type; N]是用來描述數據類型的,所以其中的N必須在編譯期間就能確認,因此N不能是一個變量。

fn main(){
  let n = 3;
  // 編譯錯誤,提示n不是常量值
  let _arr1: [&str; n] = ["junma", "jinlong", "gaoxiao"];
}

可以迭代數組,不過不能直接for i in arr{},而是for i in &arr{}或者for i in arr.iter(){}。例如:

fn main(){
  let arr = [11,22,33,44];
  for i in arr.iter() {
    println!("{}", i);
  }
}

數組有很多方法可以使用,例如len()方法可以獲取數組的長度。

fn main(){
  let arr = [11,22,33,44];
  println!("{}", arr.len());    // 4
}

實際上,數組的方法都來自Slice類型。Slice類型後面會詳細介紹。