Saltearse al contenido

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.

El struct Table está diseñado para manejar almacenamiento a gran escala con eficiencia:

  • handle: Una dirección que identifica únicamente la tabla.

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.
  • new<K: copy + drop, V: store>(): Table<K, V>: Crea una nueva tabla.
  • 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.
  • 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.
  • contains<K: copy + drop, V>(table: &Table<K, V>, key: K): bool: Verifica si la tabla contiene una clave.
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
}
}
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
}
}