向量 - Vector

Move中的向量是一个动态数组,可以增大或缩小。它是一种通用类型,这意味着它可以容纳任何类型的数据,从原始类型到复杂的结构。 它类似于Rust中的Vec类型或Java中的ArrayList。Move中的vector模块具有多个原生函数,允许你创建、访问和操作向量。 这些原生函数直接用Rust编写,并通过Sui Move虚拟机调用,因此比用Move编写相同的函数更快、更高效。创建向量有两种方法:

  1. 使用向量字面量:
let v = vector[1, 2, 3, 4];
  1. 使用 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_ofswap_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);