Vector
El Vector en Move proporciona una estructura de datos dinámica similar a un array que es flexible y soporta varias operaciones como indexación, agregar y remover elementos. Los vectores en Move son expandibles y soportan indexación basada en 0.
Características Core de Vector
Sección titulada «Características Core de Vector»Estructura
Sección titulada «Estructura»El módulo vector proporciona varias funciones nativas y de Move para gestionar arrays dinámicos:
- empty: Crea un vector vacío.
- length: Retorna la longitud del vector.
- borrow: Retorna una referencia inmutable a un elemento en un índice dado.
- push_back: Agrega un elemento al final del vector.
- borrow_mut: Retorna una referencia mutable a un elemento en un índice dado.
- pop_back: Remueve y retorna el último elemento del vector.
- destroy_empty: Destruye un vector vacío.
- swap: Intercambia elementos en dos índices dados.
Constantes
Sección titulada «Constantes»Las siguientes constantes definen varios códigos de error usados dentro del módulo:
- EINDEX_OUT_OF_BOUNDS: 0x20000
Resumen de la API
Sección titulada «Resumen de la API»Creando Vectores
Sección titulada «Creando Vectores»- empty<Element>(): vector<Element>: Crea un vector vacío.
- singleton<Element>(e: Element): vector<Element>: Crea un vector con un solo elemento.
Gestionando Elementos
Sección titulada «Gestionando Elementos»- push_back<Element>(v: &mut vector<Element>, e: Element): Agrega un elemento al final del vector.
- pop_back<Element>(v: &mut vector<Element>): Element: Remueve y retorna el último elemento del vector.
- remove<Element>(v: &mut vector<Element>, i: u64): Element: Remueve un elemento en un índice específico y desplaza los elementos subsiguientes.
- swap_remove<Element>(v: &mut vector<Element>, i: u64): Element: Intercambia el elemento en el índice dado con el último elemento y lo remueve.
Recuperando Elementos
Sección titulada «Recuperando Elementos»- borrow<Element>(v: &vector<Element>, i: u64): &Element: Retorna una referencia inmutable a un elemento en un índice dado.
- borrow_with_default<Element>(v: &vector<Element>, i: u64, default: &Element): &Element: Retorna una referencia a un elemento o un valor por defecto si el índice está fuera de límites.
- borrow_mut<Element>(v: &mut vector<Element>, i: u64): &mut Element: Retorna una referencia mutable a un elemento en un índice dado.
Funciones de Utilidad
Sección titulada «Funciones de Utilidad»- length<Element>(v: &vector<Element>): u64: Retorna el número de elementos en el vector.
- is_empty<Element>(v: &vector<Element>): bool: Verifica si el vector está vacío.
- contains<Element>(v: &vector<Element>, e: &Element): bool: Verifica si el vector contiene un elemento dado.
- index_of<Element>(v: &vector<Element>, e: &Element): (bool, u64): Retorna el índice de un elemento dado si se encuentra.
- reverse<Element>(v: &mut vector<Element>): Invierte el orden de los elementos en el vector.
- append<Element>(lhs: &mut vector<Element>, other: vector<Element>): Agrega todos los elementos de un vector a otro.
- for_each<Element>(v: vector<Element>, f: |Element|): Aplica una función a cada elemento en el vector.
- for_each_ref<Element>(v: &vector<Element>, f: |&Element|): Aplica una función a una referencia de cada elemento en el vector.
- for_each_mut<Element>(v: &mut vector<Element>, f: |&mut Element|): Aplica una función a una referencia mutable de cada elemento en el vector.
- fold<Accumulator, Element>(v: vector<Element>, init: Accumulator, f: |Accumulator, Element|Accumulator): Accumulator: Aplica una función para acumular un valor sobre los elementos del vector.
- map<Element, NewElement>(v: vector<Element>, f: |Element|NewElement): vector<NewElement>: Mapea una función sobre los elementos del vector, produciendo un nuevo vector.
- filter<Element: drop>(v: vector<Element>, p: |&Element|bool): vector<Element>: Filtra el vector usando una función predicado.
Ejemplo de Uso
Sección titulada «Ejemplo de Uso»Creando y Usando un Vector
Sección titulada «Creando y Usando un Vector»module 0x42::vector_usage {    use std::vector;
    public entry fun main() {        let v = vector::empty<u64>();        vector::push_back(&mut v, 10);        vector::push_back(&mut v, 20);
        let length = vector::length(&v);        assert!(length == 2, 0);
        let first_elem = vector::borrow(&v, 0);        assert!(*first_elem == 10, 0);
        let second_elem = vector::borrow(&v, 1);        assert!(*second_elem == 20, 0);
        let last_elem = vector::pop_back(&mut v);        assert!(last_elem == 20, 0);
        vector::destroy_empty(v);    }}Agregando Vectores
Sección titulada «Agregando Vectores»module 0x42::vector_usage {    use std::vector;
    public fun append_vectors() {        let v1 = vector::empty<u64>();        let v2 = vector::empty<u64>();
        vector::push_back(&mut v1, 1);        vector::push_back(&mut v1, 2);
        vector::push_back(&mut v2, 3);        vector::push_back(&mut v2, 4);
        vector::append(&mut v1, v2);
        let length = vector::length(&v1);        assert!(length == 4, 0);
        let first_elem = vector::borrow(&v1, 0);        assert!(*first_elem == 1, 0);
        let second_elem = vector::borrow(&v1, 1);        assert!(*second_elem == 2, 0);
        let third_elem = vector::borrow(&v1, 2);        assert!(*third_elem == 3, 0);
        let fourth_elem = vector::borrow(&v1, 3);        assert!(*fourth_elem == 4, 0);    }}Removiendo Elementos
Sección titulada «Removiendo Elementos»module 0x42::vector_usage {    use std::vector;
    public fun remove_elements() {        let v = vector::empty<u64>();
        vector::push_back(&mut v, 1);        vector::push_back(&mut v, 2);        vector::push_back(&mut v, 3);
        let removed_elem = vector::remove(&mut v, 1);        assert!(removed_elem == 2, 0);
        let length = vector::length(&v);        assert!(length == 2, 0);
        let first_elem = vector::borrow(&v, 0);        assert!(*first_elem == 1, 0);
        let second_elem = vector::borrow(&v, 1);        assert!(*second_elem == 3, 0);    }}Intercambiando Elementos
Sección titulada «Intercambiando Elementos»module 0x42::vector_usage {    use std::vector;
    public fun swap_elements() {        let v = vector::empty<u64>();
        vector::push_back(&mut v, 1);        vector::push_back(&mut v, 2);        vector::push_back(&mut v, 3);
        vector::swap(&mut v, 0, 2);
        let first_elem = vector::borrow(&v, 0);        assert!(*first_elem == 3, 0);
        let third_elem = vector::borrow(&v, 2);        assert!(*third_elem == 1, 0);    }}