Array em Ruby
Tags: braziliandevs, ruby, rails, array
Published: 2021-09-04 05:13:22

## O que é um array?

De forma bem simples e direta, um Array é uma coleção de dados.

Na linguagem de programação Ruby um Array pode conter objetos como String, Integer, Fixnum, Hash, Symbol e até mesmo outros Arrays.

Em linguagens como Java e C, você deve declarar explicitamente o tamanho de um array.

Em Ruby, diferente de outras linguagens os arrays crescem automaticamente ao adicionar elementos a eles. Dessa forma não é necessário definir o tamanho de um array.

É importante saber que podemos por exemplo, acessar um elemento em um array por meio do seu índice.

### O que é um índice em um Array?

Um índice é a posição de um elemento referente a um array.

![Posicionamento em um array](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9elhzwa1884wfrjjkknf.png)

Ou seja, quando precisamos por exemplo acessar diretamente o terceiro elemento de um array, uma das formas de se fazer isso em Ruby seria passar o ``index`` 2: 

```ruby
> x = [7, 5, 3, 4]
> x[2]
> 3
```

---

> **Detalhes importantes sobre Arrays em ruby**
- Os arrays são colocados em colchetes;
- Eles são dinâmicos, ou seja, crescem automaticamente quando são acrescentados elementos;
- Se somarmos dois arrays obteremos um novo array, porém maior (alocado em memória) em vez de fazer aritmética de ponteiros.

---

## Manipulando - Array

Imagine o seguinte cenário, estamos em um supermercado fazendo compras, pegamos um carrinho de compras, dessa forma o carrinho de será o nosso array…

### - Criando um array

Primeiramente vamos criar um array vazio (no caso um carrinho de compras vazio):

```ruby
cart = []
=> []
```

### - Usando o método `empty?`

Vamos conferir se o nosso carrinho de compras (o array) esta de fato vazio?

```ruby
cart.empty?
=> true
```
De fato, como podemos perceber, nosso carrinho esta vazio!

> Então vamos às compras...

### - Adicionando itens em um Array

Precisamos adicionar alguns itens ao nosso carrinho de compras, e para isso vamos usar o método push:**

```ruby
cart.push('Arroz')
=> ["Arroz"]

cart.push('Banana')
=> ["Arroz", "Banana"]

cart.push('Farinha de Trigo')
=> ["Arroz", "Banana", "Farinha de Trigo"]

cart.push('Feijão')
=> ["Arroz", "Banana", "Farinha de Trigo", "Feijão"]
```

### - Adicionando itens em uma determinada posição de um Array

Vamos colocar mais 2 itens na primeira posição do nosso carrinho (array)?

```ruby
cart.insert(0, 'Abóbora', 'Abacaxi')
=> ["Abóbora", "Abacaxi", "Arroz", "Banana", "Farinha de Trigo", "Feijão"]
```

### - Verificando o array:

Vamos verificar como ficou nosso carrinho de compras:

```ruby
cart
=> ["Abóbora", "Abacaxi", "Arroz", "Banana", "Farinha de Trigo", "Feijão"]
```

### - Acessando alguns dos elementos do array (carrinho):

```ruby
cart[0]
=> "Abóbora"

cart[2]
=> "Arroz"

cart[4]
=> "Farinha de Trigo"
```

> **É possível acessar os itens do último para o primeiro**

```ruby
cart[-1]
=> "Feijão"

cart[-2]
=> "Farinha de Trigo"

cart[-3]
=> "Banana"

cart[-4]
=> "Arroz"
```

### - Acessando o primeiro elemento do array:

Podemos acessar o primeiro elemento do array das 2 formas a seguir...

```ruby
cart[0]
=> "Abóbora"
```

ou

```ruby
cart.first
=> "Abóbora"
```

### - Acessando o último elemento do array:

Para acessar o último da lista podemos fazer das 2 formas a seguir:

```ruby
cart[5]
=> "Feijão"
```

ou

```ruby
cart.last
=> "Feijão"
```

Vamos conferir novamente se o array esta de fato vazio?

```ruby
cart.empty?
=> false
```

### - Usando métodos para contar os elementos um array:

Vamos conferir quantos itens temos no carrinho...

```ruby
cart.count
=> 6

cart.size
=> 6

cart.length
=> 6
```

### - Usando o método `include?`

Vamos verificar se não esquecemos do Arroz

```ruby
cart.include?('Arroz')
=> true
```

```ruby
cart
=> ["Abóbora", "Abacaxi", "Arroz", "Banana", "Farinha de Trigo", "Feijão"]
```

### - Usando o método `delete_at`

Ficou muito caro vamos remover o quarto item

```ruby
cart.delete_at(3)
=> "Banana"
```

```ruby
cart
=> ["Abóbora", "Abacaxi", "Arroz", "Farinha de Trigo", "Feijão"]
```

### - Usando o método `pop` para remover o último item do array:

Resolvemos excluir o último item

```ruby
cart.pop
=> "Feijão"

cart
=> ["Abóbora", "Abacaxi", "Arroz", "Farinha de Trigo"]
```

### - Usando o método `shift` para remover o primeiro item do array:

Vamos excluir o primeiro?

```ruby
cart.shift
=> "Abóbora"

cart
=> ["Abacaxi", "Arroz", "Farinha de Trigo"]
```

## Iteração - Array

Vamos iterar (percorrer) no array utilizando os métodos de iteração:

Primeiramente vamos criar um novo array:

```ruby
cart = ['Arroz', 'Banana', 'Farinha de Trigo', 'Feijão']
=> ["Arroz", "Banana", "Farinha de Trigo", "Feijão"]
```

### Usando o `each` para iterar o array

Com o each conseguimos percorrer cada item do nosso array.

```ruby
cart.each do |item|
  puts item
end

Arroz
Banana
Farinha de Trigo
Feijão
=> ["Arroz", "Banana", "Farinha de Trigo", "Feijão"]
```

### Usando o método `map`

Vamos usar o map? 

```ruby
numbers = [2, 6, 8, 9]
=> [2, 6, 8, 9]
```

Quando usamos o `map`, um novo array é criado para que o nosso array numbers por ex. não seja alterado. Por isso estamos atribuindo esse novo array à variável sums.

```ruby
sums = numbers.map do |n|
  n * 2
end
=> [4, 12, 16, 18]
```

```ruby
sums
=> [4, 12, 16, 18]
```

Vamos manipular o array numbers sem que um novo array seja criado?

Ou seja, iremos sobrescrever o nosso array numbers com o novo array criado pelo map.

```ruby
numbers = numbers.map{|n| n * 3}
=> [6, 18, 24, 27]
```

No exemplo acima utilizamos o map inline.

```ruby
numbers
=> [6, 18, 24, 27]
```

### Usando o método `select`

Selecionando items do array...

```ruby
array = [1, 2, 3, 4, 5, 6]
=> [1, 2, 3, 4, 5, 6]
```

Quando usamos o `select`, o `select` cria um outro array para que o nosso array por ex. não seja alterado. E por isso estamos atribuindo esse novo array à variável selection.

```ruby
selection = array.select do |a|
  a >= 2
end
=> [2, 3, 4, 5, 6]
```

```ruby
selection
=> [2, 3, 4, 5, 6]
```

Caso você precise saber mais detalhes sobre Array eu sugiro que dê uma olhada na [documentação do Ruby](https://ruby-doc.org/core-3.0.0/Array.html) que é bastante completa e tem vários exemplos.

Contato:
Email: contato@diegonovais.com.br
LinkedIn: https://www.linkedin.com/in/diegonovais/
Github: https://github.com/dnovais