集合 (Collections)
集合提供了一种便捷的方式来处理数据组。Sui 框架提供了几个提供集合逻辑的模块:
bag
Bag 是一种异构的类似映射的集合。该集合类似于 sui::table
,因为其键和值并未存储在 Bag 值内部,而是使用 Sui 的对象系统存储。Bag 结构仅充当进入对象系统以检索那些键和值的句柄。这意味着在运行时,具有完全相同键值映射的 Bag 值不会相等,使用 ==。
要了解更多,请参阅 Table and Bag 或 GitHub 上的 框架定义。
dynamic_field
除了类型定义中声明的字段之外,Sui 对象还可以具有在构建对象后添加的动态字段。与普通字段名称(始终是静态声明的标识符)不同,动态字段名称可以是具有复制、丢弃和存储能力的任何值(例如,整数、布尔值或字符串)。这使得 Sui 程序员可以灵活地动态扩展对象,并且它也作为核心集合类型的构建块。
要了解更多,请参阅 Dynamic Fields 或 GitHub 上的 框架定义。
dynamic_object_field
与 sui::dynamic_field
类似,此模块允许访问动态字段。但与 sui::dynamic_field
不同,这些动态字段绑定的值必须是对象本身。这允许对象仍然存在于存储中,这对于外部工具可能很重要。从 Move 内部来看,除了这一点外,其他地方没有可观察到的差异。
要了解更多,请参阅 Dynamic Fields 或 GitHub 上的 框架定义。
linked_table
类似于 sui::table
,但值被链接在一起,允许有序插入和删除。
要了解更多,请参阅 GitHub 上的 框架定义。
object_bag
类似于 sui::bag
,ObjectBag
是一种异构的类似映射的集合。但与 sui::bag
不同,绑定到这些动态字段的值必须是对象本身。这允许对象仍然存在于存储中,这对于外部工具可能很重要。从 Move 内部来看,除了这一点外,其他地方没有可观察到的差异。
要了解更多,请参阅 Table and Bag 或 GitHub 上的 框架定义。
object_table
类似于 sui::table
,ObjectTable<K, V>
是一种类似映射的集合。但与 sui::table
不同,绑定到这些动态字段的值必须是对象本身。这允许对象仍然存在于存储中,这可能对于外部工具很重要。从 Move 内部来看,除了这一点外,其他地方没有可观察到的差异。
要了解更多,请参阅 Table and Bag 或 GitHub 上的 框架定义。
priority_queue
使用最大堆实现的优先级队列。
要了解更多,请参阅 GitHub 上的 框架定义。
table
Table 是一种类似映射的集合。但与传统集合不同,其键和值并未存储在 Table 值内部,而是使用 Sui 的对象系统存储。Table 结构仅充当进入对象系统以检索那些键和值的句柄。请注意,这意味着在运行时,具有完全相同键值映射的 Table 值不会相等,使用 ==。
要了解更多,请参阅 Table and Bag 或 GitHub 上的 框架定义。
table_vec
使用 Table 实现的基本可扩展矢量库。
要了解更多,请参阅 GitHub 上的 框架定义。
vec_map
由向量支持的映射数据结构。该映射保证不包含重复的键,但条目不按键排序--条目按插入顺序包含。所有操作在映射大小的 O(N) 内完成--此数据结构的意图仅在提供对映射 API 的编程便利性。大型映射应该使用手工编写的父/子关系。需要排序迭代而不是按插入顺序迭代的映射也应该手工编写。
要了解更多,请参阅 GitHub 上的 框架定义。
vec_set
vec_set
的主要对象是由向量支持的集合数据结构。这个集合保证不包含重复的键。所有操作在集合大小的 O(N) 内完成。这个数据结构的目的只是为了提供对集合 API 的编程便利性。需要排序迭代而不是按插入顺序迭代的集合应该手工编写。
要了解更多,请参阅 GitHub 上的 框架定义。