向量 (Vector)
向量是 Move 中儲存元素集合的一種原生方式。它們類似於其他程式語言中的陣列,但有一些不同之處。在本節中,我們將介紹 vector 類型及其操作。
向量語法 (Vector syntax)
vector 類型的寫法是使用 vector 關鍵字,後接角括號括起來的元素類型。元素類型可以是任何有效的 Move 類型,包括其他向量。
Move 有一種向量常值 (literal) 語法,允許您使用 vector 關鍵字,後接包含元素的方括號(如果是空向量則不包含元素)來建立向量。
// 一個空的布林元素向量。
let empty: vector<bool> = vector[];
// 一個 u8 元素的向量。
let v: vector<u8> = vector[10, 20, 30];
// 一個 vector<u8> 元素的向量。
let vv: vector<vector<u8>> = vector[
vector[10, 20],
vector[30, 40]
];
vector 類型是 Move 中的內建類型,不需要從模組匯入。向量操作定義在 std::vector 模組中,該模組會被隱式匯入,且無需明確的 use 匯入即可直接使用。
向量操作 (Vector operations)
標準庫提供了操作向量的方法。以下是一些最常用的操作:
- push_back: 在向量末尾添加一個元素。
- pop_back: 移除向量的最後一個元素。
- length: 傳回向量中的元素數量。
- is_empty: 如果向量為空則傳回 true。
- remove: 移除指定索引處的元素。
let mut v = vector[10u8, 20, 30];
assert_eq!(v.length(), 3);
assert_eq!(v.is_empty(), false);
v.push_back(40);
let last_value = v.pop_back();
assert_eq!(last_value, 40);
銷毀不可丟棄類型的向量 (Destroying a Vector of non-droppable types)
不可丟棄類型的向量不能被捨棄。如果您定義了一個不具備 drop 能力的類型的向量,則該向量的值不能被忽略。如果向量為空,編譯器要求明確呼叫 destroy_empty 函式。
/// 沒有 `drop` 能力的結構體。
public struct NoDrop {}
#[test]
fun test_destroy_empty() {
// 初始化一個 `NoDrop` 元素的向量。
let v = vector<NoDrop>[];
// 雖然我們知道 `v` 是空的,我們仍然需要呼叫
// 明確的 `destroy_empty` 函式來丟棄向量。
v.destroy_empty();
}
如果您對非空向量呼叫 destroy_empty 函式,它將在執行時期失敗。
延伸閱讀
- Move 參考手冊中的 向量 (Vector)。
- std::vector 模組文件。