向量映射 - VecMap
VecMap 是一种由向量支持的简单映射数据结构。该映射保证不包含重复的键,但条目并不是按键排序的——条目是按插入顺序包含的。 与向量类似,当元素数量较多时,不应使用 VecMap,因为这会导致访问和更新的 gas 成本较高。当元素数量较多时,应使用表。
VecMap 允许通过键或索引(基于插入顺序)访问。
创建一个新的 VecMap:
let map = vec_map::empty<u64, u64>();
插入一个新的键值对:
vec_map::insert(&mut map, 1, 2);
删除一个键值对:
vec_map::remove(&mut map, &1);
通过键访问元素:
let value = vec_map::get(&map, &1);
如果不确定键是否存在并且不想因为错误而中止整个交易,可以使用 try_get
:
let value_opt = vec_map::try_get(&map, &1);
if (option::is_some(&value_opt)) {
let value = option::unwrap(value_opt);
}
通过索引访问元素:
let (key, value) = vec_map::get_entry_by_idx(&map, 0);
通过键修改元素:
*vec_map::get_mut(&mut map, &1) = 3;
通过索引修改元素:
*vec_map::get_entry_by_idx_mut(&mut map, 0).1 = 3;
将映射解包成键和值的向量:
let (keys, values) = vec_map::into_keys_values(map);
VecMap 不能自动丢弃。必须先明确删除所有元素,然后才能销毁 VecMap:
vec_map::destroy_empty(map);
其他有用的函数包括:
size
: 获取映射中元素数量的is_empty
: 检查映射是否为空keys
: 获取映射中键列表