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类型后面会详细介绍。