数组
数组分为定长数组和可变数组,其中定长数组为基本类型,常说的数组指的也是它,存储在栈上,动态数组对应类型为 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);