对象数据结构 - ObjectTable

另一种可以用来存储对象的很酷的数据结构是 ObjectTable。它与 ObjectBag 不同,只允许存储单一类型的对象。 尽管 ObjectTable 更有限,但当用户希望为表中同一类型的不同对象指定特定的键名时,它仍然非常有用。

use sui::object_table::{Self, ObjectTable};

public struct MyObject has key, store {
    id: UID,
}

public struct MyTable has key {
    id: UID,
    table: ObjectTable<String, MyObject>,
}

public fun create_table(ctx: &mut TxContext) {
    transfer::transfer(MyTable {
        id: object::new(ctx),
        table: object_table::new(ctx),
    }, tx_context::sender(ctx));
}

public fun add_to_table(my_bag: &mut MyBag, key: String, object: MyObject) {
    object_table::add(&mut my_bag.object_bag, key, object);
}

在底层,ObjectTable 也使用动态对象字段,类似于 ObjectBag。在定义对象表字段时,我们还需要指定键和值的确切类型。

ObjectTable 还提供与 ObjectHat 相同的函数:addcontainsremoveborrowborrow_mutlengthis_empty