Table
La Table
proporciona una forma flexible y eficiente de gestionar grandes cantidades de datos en formato de tabla. Cada elemento de la tabla se representa como un elemento de estado global separado, permitiendo soluciones de almacenamiento escalables.
Características Core de Table
Sección titulada «Características Core de Table»Estructura
Sección titulada «Estructura»El struct Table
está diseñado para manejar almacenamiento a gran escala con eficiencia:
handle
: Una dirección que identifica únicamente la tabla.
Constantes
Sección titulada «Constantes»Las siguientes constantes definen varios códigos de error usados dentro del módulo (estos están implícitos pero no declarados explícitamente en el código proporcionado):
ENOT_FOUND
: Clave no encontrada en la tabla.EALREADY_EXIST
: La clave ya existe en la tabla.EINVALID_ARGUMENT
: Argumento inválido pasado a una función.
Resumen de la API
Sección titulada «Resumen de la API»Creando Tablas
Sección titulada «Creando Tablas»new<K: copy + drop, V: store>(): Table<K, V>
: Crea una nueva tabla.
Gestionando Entradas
Sección titulada «Gestionando Entradas»add<K: copy + drop, V>(table: &mut Table<K, V>, key: K, val: V)
: Agrega un par clave-valor a la tabla. Aborta si la clave ya existe.remove<K: copy + drop, V>(table: &mut Table<K, V>, key: K): V
: Remueve y retorna el valor asociado con una clave. Aborta si la clave no se encuentra.upsert<K: copy + drop, V: drop>(table: &mut Table<K, V>, key: K, value: V)
: Inserta o actualiza un par clave-valor.
Recuperando Entradas
Sección titulada «Recuperando Entradas»borrow<K: copy + drop, V>(table: &Table<K, V>, key: K): &V
: Retorna una referencia inmutable al valor asociado con una clave. Aborta si la clave no se encuentra.borrow_with_default<K: copy + drop, V>(table: &Table<K, V>, key: K, default: &V): &V
: Retorna el valor asociado con una clave o un valor por defecto si la clave no se encuentra.borrow_mut<K: copy + drop, V>(table: &mut Table<K, V>, key: K): &mut V
: Retorna una referencia mutable al valor asociado con una clave. Aborta si la clave no se encuentra.borrow_mut_with_default<K: copy + drop, V: drop>(table: &mut Table<K, V>, key: K, default: V): &mut V
: Inserta un par clave-valor si la clave no se encuentra, luego retorna una referencia mutable al valor.
Funciones de Utilidad
Sección titulada «Funciones de Utilidad»contains<K: copy + drop, V>(table: &Table<K, V>, key: K): bool
: Verifica si la tabla contiene una clave.
Ejemplo de Uso
Sección titulada «Ejemplo de Uso»Creando y Usando una Tabla
Sección titulada «Creando y Usando una Tabla»module 0x42::table_usage { use aptos_std::table;
public entry fun main() { let table = table::new<u64, u64>(); table::add(&mut table, 1, 100); table::add(&mut table, 2, 200);
let value1 = table::borrow(&table, 1); assert!(*value1 == 100, 0);
let value2 = table::borrow(&table, 2); assert!(*value2 == 200, 0);
let removed_value = table::remove(&mut table, 1); assert!(removed_value == 100, 0);
let contains_key = table::contains(&table, 2); assert!(contains_key, 0);
// Nota: Una tabla debe ser almacenada en un recurso al final de una función }}
Agregando y Actualizando Múltiples Entradas
Sección titulada «Agregando y Actualizando Múltiples Entradas»module 0x42::table_usage { use aptos_std::table;
public fun add_and_upsert_entries() { let table = table::new<u64, u64>(); table::add(&mut table, 1, 100); table::upsert(&mut table, 1, 200); table::upsert(&mut table, 2, 300);
let value1 = table::borrow(&table, 1); assert!(*value1 == 200, 0);
let value2 = table::borrow(&table, 2); assert!(*value2 == 300, 0);
// Nota: Una tabla debe ser almacenada en un recurso al final de una función }}
Tomando Referencias Mutables
Sección titulada «Tomando Referencias Mutables»module 0x42::table_usage { use aptos_std::table;
public fun borrow_mutable_references() { let table = table::new<u64, u64>(); table::add(&mut table, 1, 100);
let value_mut = table::borrow_mut(&mut table, 1); *value_mut = 200;
let value = table::borrow(&table, 1); assert!(*value == 200, 0);
// Nota: Una tabla debe ser almacenada en un recurso al final de una función }}