Arrays

Arrays

Chegou o momento daquele assunto que é um dos terrores para quem esta começando a programar, os arrays.

Array é uma estrutura de dados sequêncial que armazena o mesmo tipo de dados, seriam como uma sequência de células de memória indexadas. Geralmente iniciamos sua contagem a partir do número 0.

arrays

Em Rust declaramos arrays da seguinte maneira let nome: [tipo; tamanho] = [valor; tamanho], Rust nos obriga a inicializar o array, então faremos da seguinte maneira.

fn main() {
    let array: [u8; 7] = [0; 7];
}

Deste modo temos um array de 7 posições preenchido com o valor 0, para acessarmos valores específicos dentro do array utilizamos os colchetes [posicao], para modificarmos qualquer valor dentro do array também precisamos do uso da palavra mut.

Em um array temos o método len onde conseguimos saber o tamanho do array, este método é muito util para realizar um loop for para percorrer o array.

Iremos realizar uma simples operação com um array, teremos um array de 10 posições e iremos percorrer esse array e daremos o valor para cada posição com a seguinte regra: posição + 10, e logo depois iremos imprimir no console este array.

fn main() {
    let mut array: [u8; 10] = [0; 10];
    for i in 0..array.len() {
        array[i] = i as u8 + 10u8;
    }

    for i in 0..array.len() {
        println!("Pos: {}, val: {}", i, array[i]);
    }
}

O uso da palavra as será discutido depois, após a execução do código acima temos o resultado:

Pos: 0, val: 10
Pos: 1, val: 11
Pos: 2, val: 12
Pos: 3, val: 13
Pos: 4, val: 14
Pos: 5, val: 15
Pos: 6, val: 16
Pos: 7, val: 17
Pos: 8, val: 18
Pos: 9, val: 19

Também temos outro modo de executar este loop para realizar o print dos valores:

fn main() {
    let mut array: [u8; 10] = [0; 10];
    for i in 0..array.len() {
        array[i] = i as u8 + 10u8;
    }

    for val in array {
        println!("Val: {}", val);
    }
}

Do modo em que fizemos perdemos a informação do índice que estamos percorrendo, mas temos o seguinte resultado:

Val: 10
Val: 11
Val: 12
Val: 13
Val: 14
Val: 15
Val: 16
Val: 17
Val: 18
Val: 19

Para termos o índice de volta podemos fazer da seguinte maneira:

fn main() {
    let mut array: [u8; 10] = [0; 10];
    for i in 0..array.len() {
        array[i] = i as u8 + 10u8;
    }

    for (i, val) in array.iter().enumerate() {
        println!("pos: {}, val: {}", i, val);
    }
}

Assim temos a saída:

pos: 0, val: 10
pos: 1, val: 11
pos: 2, val: 12
pos: 3, val: 13
pos: 4, val: 14
pos: 5, val: 15
pos: 6, val: 16
pos: 7, val: 17
pos: 8, val: 18
pos: 9, val: 19