向量 - Vector
Move中的向量是一个动态数组,可以增大或缩小。它是一种通用类型,这意味着它可以容纳任何类型的数据,从原始类型到复杂的结构。 它类似于Rust中的Vec类型或Java中的ArrayList。Move中的vector模块具有多个原生函数,允许你创建、访问和操作向量。 这些原生函数直接用Rust编写,并通过Sui Move虚拟机调用,因此比用Move编写相同的函数更快、更高效。创建向量有两种方法:
- 使用向量字面量:
let v = vector[1, 2, 3, 4];
- 使用
empty
函数:
let v = vector::empty<u64>();
请注意,如果在同一函数中向此向量添加元素,则可能不需要类型提示
let v = vector::empty();
vector::push_back(&mut v, 1);
要从向量中读取值,请使用 borrow
函数:
let v = vector[1, 2, 3, 4];
let x = vector::borrow(&v, 2);
请注意,x 是一个引用类型,这意味着它不能被修改。如果向量中的值是可复制的(具有 copy 能力),你可以通过解引用来制作副本:
let v = vector[1, 2, 3, 4];
let x = *vector::borrow(&v, 2);
要原地修改向量的值,请使用 borrow_mut
函数:
let v = vector[1, 2, 3, 4];
let x = vector::borrow_mut(&mut v, 2);
*x = *x + 1;
要移除向量中的最后一个元素,请使用 pop_back
函数:
let v = vector[1, 2, 3, 4];
let x = vector::pop_back(&mut v);
你还可以通过使用 index_of
和 swap_remove
函数从向量中移除特定的元素:
let v = vector[1, 2, 3, 4];
let (found, i) = vector::index_of(&v, 3);
if (found) {
vector::swap_remove(&mut v, i);
}
数组可以合并和反转:
let v1 = vector[1, 2, 3];
let v2 = vector[4, 5, 6];
vector::append(&mut v1, v2);
vector::reverse(&mut v1);