Rust 数组、元组、枚举 ---- Day4

217 阅读1分钟

数组

数组分为定长数组和可变数组,其中定长数组为基本类型,常说的数组指的也是它,存储在栈上,动态数组对应类型为 Vector,存储在堆上。数组元素类型要求保持一致。

数组类型由元素类型和长度共同决定。

定长数组定义方式跟js字面量写法类似,写法为:

// 定义一个长度为3的数组
let list = [1, 1, 1];

// 定义类型
let list: [i32; 3] = [1, 1, 1];

// 交由编译器推导
let list: [_; 3] = [1, 1, 1];

// 简写 与定义类型时很像
let list = [1; 3];

// 通过 [索引] 获取元素
assert_eq!(list[0], 1);

// 创建引用类型数组
let list: [String; 2] = core::array::from_fn(|i| String::from("rust is good!"));

// 切片
let slice = &list[0..1];

// 遍历 1
for it in list.iter() {}

// 遍历 2
for it in 0..list.len() {}

数组长度必须时固定的,下面代码将会报错:

// n不是固定的值
fn new_arr(n: i32) { 
    let arr = [1; n];
}

元组

元组长度固定,顺序固定,可以包含多种类型的成员。

// 定义方式
let tuple = (1, "a", [2, 3]);

// 可以解构
let (x, y, z) = tuple

// 通过.索引访问元素
tuple.0

枚举

枚举是一个类型,枚举值为枚举中某个成员的实例

enum Type {
    a,
    b,
    c,
    d
}

// 不能赋值
let pocker: Type = Type::a;

enum WithValue {
    a(i32),
    b(char),
    c(String),
    size: { w: i32, h: i32 },
    pos(x: i32, y: i32)
}

let a = WithValue::a(2);

let b = WithValue::a('aadd');

let c = WithValue::c(String::from("haha"));

// 结构体
let size = WithValue::size{ x: 100, y: 50 };

// 元组
let pos = WithValue::pos(-1, 2);