Szukaj…


Tablice

Tablica jest alokowaną na stosie statyczną wielkością listą obiektów jednego typu.

Tablice są zwykle tworzone przez umieszczenie listy elementów danego typu w nawiasach kwadratowych. Typ tablicy jest oznaczony specjalną składnią: [T; N] gdzie T jest rodzajem jego elementów, a N ich liczba, z których oba muszą być znane w czasie kompilacji.

Na przykład [4u64, 5, 6] to 3-elementowa tablica typu [u64; 3] . Uwaga: 5 i 6 można wywnioskować, że są typu u64 .


Przykład

fn main() {
    // Arrays have a fixed size.
    // All elements are of the same type.
    let array = [1, 2, 3, 4, 5];

    // Create an array of 20 elements where all elements are the same.
    // The size should be a compile-time constant.
    let ones = [1; 20];

    // Get the length of an array.
    println!("Length of ones: {}", ones.len());

    // Access an element of an array.
    // Indexing starts at 0.
    println!("Second element of array: {}", array[1]);

    // Run-time bounds-check.
    // This panics with 'index out of bounds: the len is 5 but the index is 5'.
    println!("Non existant element of array: {}", array[5]);
}

Ograniczenia

Dopasowywanie wzorców na tablicach (lub plasterkach) nie jest obsługiwane w stabilnej Rust (patrz # 23121 i wzory plasterków ).

Rdza nie obsługuje generyczności liczb na poziomie typu (patrz RFC # 1657 ). Dlatego nie można po prostu zaimplementować cechy dla wszystkich tablic (wszystkich rozmiarów). W rezultacie standardowe cechy są implementowane tylko dla tablic o ograniczonej liczbie elementów (ostatnio sprawdzane, do 32 włącznie). Obsługiwane są tablice z większą liczbą elementów, ale nie implementują standardowych cech (patrz dokumenty ).

Mamy nadzieję, że ograniczenia te zostaną zniesione w przyszłości.

Wektory

Wektor jest zasadniczo wskaźnikiem do dynamicznie przydzielanej sterty listy obiektów jednego typu.


Przykład

fn main() {
    // Create a mutable empty vector
    let mut vector = Vec::new();

    vector.push(20);
    vector.insert(0, 10); // insert at the beginning

    println!("Second element of vector: {}", vector[1]); // 20

    // Create a vector using the `vec!` macro
    let till_five = vec![1, 2, 3, 4, 5];

    // Create a vector of 20 elements where all elements are the same.
    let ones = vec![1; 20];

    // Get the length of a vector.
    println!("Length of ones: {}", ones.len());

    // Run-time bounds-check.
    // This panics with 'index out of bounds: the len is 5 but the index is 5'.
    println!("Non existant element of array: {}", till_five[5]);
}

Plastry

Plasterki są widokami na listę obiektów i mają typ [T] , co wskazuje na wycinek obiektów typu T

Plasterek jest typem bez rozmiaru i dlatego można go używać tylko za wskaźnikiem. (Analogia świata ciągów: str , zwana plasterkiem łańcucha, również nie ma wielkości.)

Tablice są wymuszane na plastry, a wektory można odrywać od siebie na plastry. Dlatego metody wycinania można zastosować do obu z nich. (Światowa analogia: str jest String , a [T] Vec<T> .)

fn main() {
    let vector = vec![1, 2, 3, 4, 5, 6, 7, 8];
    let slice = &vector[3..6];
    println!("length of slice: {}", slice.len()); // 3
    println!("slice: {:?}", slice); // [4, 5, 6]
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow