Arrays são uma estrutura de dados comum de se trabalhar. Por isso, existe uma coleção de métodos que podem ser usados para lidar com arrays. Isso inclui ordenar, inverter, inserir e muito mais.
Alguns desses métodos são destrutivos, o que significa que eles modificam o array original. Outros são não destrutivos, ou seja, retornam um novo array e não modificam o original.
Veja alguns dos métodos mais comuns que podem ser usados ao lidar com arrays:
Ao inserir um elemento em um array, você pode usar o método insert, que recebe um índice e um elemento como argumentos.
O elemento será inserido no índice especificado, e o restante do array será deslocado para a direita.
Se o índice estiver fora dos limites, um IndexError será gerado.
numbers = [1, 2, 3]
numbers.insert(1, 4)
numbers # => [1, 4, 2, 3]
numbers.insert(5, 5) # => Error: Index out of bounds (IndexError)
Quando você quer excluir um elemento específico de um array, pode usar o método delete, que recebe um elemento como argumento.
O método retorna o elemento que foi removido.
Se o elemento não existir no array, nil será retornado.
numbers = [1, 2, 3]
numbers.delete(2) # => 2
numbers # => [1, 3]
Quando você quer obter o primeiro ou o último elemento de um array, pode usar os métodos first e last.
Esses métodos recebem um argumento opcional que especifica quantos elementos retornar.
Eles podem melhorar a legibilidade em comparação com o uso do índice 0 ou -1, ou de um intervalo.
Se o array estiver vazio, um Enumerable::EmptyError será gerado.
numbers = [1, 2, 3]
numbers.first # => 1
numbers.last # => 3
numbers.first(2) # => [1, 2]
numbers.last(2) # => [2, 3]
empty_array = [] of Int32
empty_array.last # => Error: Empty enumerable (Enumerable::EmptyError)
Quando você quer inverter um array, pode usar o método reverse, que retorna um novo array com os elementos em ordem inversa.
É importante observar que reverse retorna um novo array e não modifica o array original.
Se você quiser modificar o array original, adicione um ! ao final do nome do método.
numbers = [1, 2, 3]
numbers.reverse # => [3, 2, 1]
numbers # => [1, 2, 3]
numbers.reverse! # => [3, 2, 1]
numbers # => [3, 2, 1]
+)O método append (<<) é útil quando você quer adicionar objetos a um array.
No entanto, ao combinar dois arrays, você pode usar o operador +, que retorna um novo array com os elementos de ambos os arrays.
[1, 2] + [3, 4] # => [1, 2, 3, 4]
Se você adicionar um array a outro array, o array será adicionado como um único elemento.
[1, 2] << [3, 4] # => [1, 2, [3, 4]]
Ao verificar se um array está vazio, você pode usar o método empty?, que retorna true se o array estiver vazio e false caso contrário.
Isso melhora a legibilidade em comparação com verificar o comprimento do array em relação a 0.
[].empty? # => true
[1, 2, 3].empty? # => false
Quando você quer obter o índice de um elemento em um array, pode usar o método index, que recebe um elemento como argumento.
Se o elemento não existir no array, nil será retornado.
numbers = [1, 2, 3]
numbers.index(2) # => 1
Quando você quer saber o número de elementos de um array, pode usar o método size.
numbers = [1, 2, 3]
numbers.size # => 3
Quando você quer contar quantas vezes um elemento aparece em um array, pode usar o método count.
fruits = ["apple", "banana", "apple"]
fruits.count("apple") # => 2
fruits.count("banana") # => 1
fruits.count("watermelon") # => 0
Quando você quer ordenar um array, pode usar o método sort, que retorna um novo array com os elementos ordenados.
Assim como reverse, esse método retorna um novo array e não modifica o array original.
numbers = [3, 2, 1]
numbers.sort # => [1, 2, 3]
numbers # => [3, 2, 1]
numbers.sort! # => [1, 2, 3]
numbers # => [1, 2, 3]
Chaitana é dona de um parque temático muito popular. Ela tem apenas uma atração, bem no centro de um terreno com paisagismo belíssimo: A Maior Montanha-Russa do Mundo(TM). Apesar de existir só essa atração, pessoas vêm de todas as partes do mundo e ficam horas na fila pela chance de andar na hipermontanha-russa da Chaitana.
Há duas filas para essa atração, cada uma representada como um array:
Você recebeu a tarefa de escrever um código para gerenciar melhor os visitantes do parque. Você precisa implementar as funções a seguir o quanto antes, antes que os visitantes (e sua chefe, Chaitana!) fiquem de mau humor.
Defina o método ColossalCoaster.add_to_queue, que recebe 4 argumentos <express_queue>, <normal_queue>, <ticket_type>, <person_name> e retorna a fila apropriada atualizada com o nome da pessoa.
<ticket_type> é um Int32, em que 1 == express_queue e 0 == normal_queue.<person_name> é o nome (como uma String) da pessoa a ser adicionada à fila correspondente.express_queue = ["Tony", "Bruce"]
normal_queue = ["RobotGuy", "WW"]
ColossalCoaster.add_to_queue(express_queue, normal_queue, 1, "RichieRich")
# => ["Tony", "Bruce", "RichieRich"]
Uma pessoa chegou atrasada ao parque, mas quer entrar na fila onde os amigos estão esperando. Só que ela não faz a menor ideia de onde os amigos estão e não há sinal de celular para ligar para eles.
Defina o método ColossalCoaster.find_my_friend, que recebe 2 argumentos, queue e friend_name, e retorna a posição do nome da pessoa na fila.
<queue> é um array de pessoas na fila.<friend_name> é o nome do amigo cujo índice (posição na fila) você precisa encontrar.ColossalCoaster.find_my_friend(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve")
# => 1
Agora que os amigos foram encontrados (na tarefa 2 acima), quem chegou atrasado quer entrar na fila junto deles, na posição em que estão.
Defina o método ColossalCoaster.add_with_friends, que recebe 3 argumentos: queue, friend_name e person_name.
<queue> é um array de pessoas na fila.<friend_name> é o nome do amigo em cuja posição a pessoa deve ser adicionada.<person_name> é o nome da pessoa a ser adicionada na posição do índice.Retorne a fila atualizada com o nome de quem chegou atrasado.
ColossalCoaster.add_with_friends(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve", "Bucky")
# => ["Natasha", "Bucky", "Steve", "T'challa", "Wanda", "Rocket"]
Você acabou de ouvir na fila que há uma pessoa muito mala empurrando, gritando e arrumando confusão. Você precisa expulsar esse sujeito por mau comportamento!
Defina o método ColossalCoaster.remove_from_queue, que recebe 2 argumentos, queue e person_name.
<queue> é um array de pessoas na fila.<person_name> é o nome da pessoa que precisa ser expulsa.Retorne a fila atualizada, sem o nome da pessoa mala.
ColossalCoaster.remove_from_queue(["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], "Eltran")
# => ["Natasha", "Steve", "Wanda", "Rocket"]
Por motivos administrativos, você precisa colocar todos os nomes de uma determinada fila em ordem alfabética.
Defina o método ColossalCoaster.sorted_queue, que recebe 1 argumento, queue (o array de pessoas na fila).
O método deve retornar uma cópia ordenada do array.
ColossalCoaster.sorted_queue(["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
# => ['Eltran', 'Natasha', 'Natasha', 'Rocket', 'Steve']
Crie sua conta no Exercism para aprender e dominar Crystal com 26 conceitos142 exercícios e mentoria humana de verdade, tudo de graça.