Os arrays são uma estrutura de dados comum com que vais trabalhar. Por isso, existe um conjunto de métodos que podes usar para lidar com arrays. Entre eles, há ordenação, inversão, inserção e muitos outros.
Alguns destes métodos são destrutivos, o que significa que modificam o array original. Outros são não destrutivos, ou seja, devolvem um novo array e não modificam o original.
Aqui ficam alguns dos métodos mais comuns que podes usar quando trabalhas com arrays:
Quando inseres um elemento num array, podes usar o método insert, que recebe um índice e um elemento como argumentos.
O elemento é inserido no índice especificado e o resto do array é deslocado para a direita.
Se o índice estiver fora dos limites, é lançado um IndexError.
numbers = [1, 2, 3]
numbers.insert(1, 4)
numbers # => [1, 4, 2, 3]
numbers.insert(5, 5) # => Error: Index out of bounds (IndexError)
Quando queres eliminar um elemento específico de um array, podes usar o método delete, que recebe um elemento como argumento.
O método devolve o elemento que foi removido.
Se o elemento não existir no array, é devolvido nil.
numbers = [1, 2, 3]
numbers.delete(2) # => 2
numbers # => [1, 3]
Quando queres obter o primeiro ou o último elemento de um array, podes usar os métodos first e last.
Estes métodos recebem um argumento opcional que especifica quantos elementos devolver.
Isto pode melhorar a legibilidade em comparação com o uso do índice 0 ou -1, ou de um intervalo.
Se o array estiver vazio, é lançado um Enumerable::EmptyError.
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 queres inverter um array, podes usar o método reverse, que devolve um novo array com os elementos pela ordem inversa.
É importante notar que reverse devolve um novo array e não modifica o array original.
Se quiseres modificar o array original, acrescenta um ! ao fim 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 de acrescentar (<<) é útil quando queres adicionar objetos a um array.
No entanto, quando combinas dois arrays, podes usar o operador +, que devolve um novo array com os elementos de ambos os arrays.
[1, 2] + [3, 4] # => [1, 2, 3, 4]
Se acrescentares um array a outro array, o array é adicionado como um único elemento.
[1, 2] << [3, 4] # => [1, 2, [3, 4]]
Quando queres verificar se um array está vazio, podes usar o método empty?, que devolve true se o array estiver vazio e false caso contrário.
Isto melhora a legibilidade em comparação com verificar se o comprimento do array é igual a 0.
[].empty? # => true
[1, 2, 3].empty? # => false
Quando queres obter o índice de um elemento num array, podes usar o método index, que recebe um elemento como argumento.
Se o elemento não existir no array, é devolvido nil.
numbers = [1, 2, 3]
numbers.index(2) # => 1
Quando queres saber o número de elementos de um array, podes usar o método size.
numbers = [1, 2, 3]
numbers.size # => 3
Quando queres contar o número de vezes que um elemento aparece num array, podes usar o método count.
fruits = ["apple", "banana", "apple"]
fruits.count("apple") # => 2
fruits.count("banana") # => 1
fruits.count("watermelon") # => 0
Quando queres ordenar um array, podes usar o método sort, que devolve um novo array com os elementos ordenados.
Tal como acontece com reverse, este método devolve 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]
A Chaitana é proprietária de um parque de diversões muito popular. Só tem uma atração, mesmo no centro de um recinto belissimamente ajardinado: a Maior Montanha-Russa do Mundo(TM). Embora só exista esta atração, há pessoas que viajam de todo o mundo e ficam horas na fila para ter a oportunidade de andar na hipermontanha-russa da Chaitana.
Há duas filas para esta atração, cada uma representada como um array:
Pediram-te para escreveres algum código para gerir melhor os visitantes do parque. Tens de implementar as seguintes funções o mais depressa possível, antes que os visitantes (e a tua chefe, a Chaitana!) fiquem irritados.
Define o método ColossalCoaster.add_to_queue, que recebe 4 argumentos <express_queue>, <normal_queue>, <ticket_type>, <person_name> e devolve a fila adequada atualizada com o nome da pessoa.
<ticket_type> é um Int32, em que 1 == express_queue e 0 == normal_queue.<person_name> é o nome (como String) da pessoa a adicionar à fila respetiva.express_queue = ["Tony", "Bruce"]
normal_queue = ["RobotGuy", "WW"]
ColossalCoaster.add_to_queue(express_queue, normal_queue, 1, "RichieRich")
# => ["Tony", "Bruce", "RichieRich"]
Uma pessoa chegou tarde ao parque, mas quer juntar-se à fila onde os seus amigos estão à espera. No entanto, não faz ideia de onde os amigos estão e não há rede de telemóvel para lhes telefonar.
Define o método ColossalCoaster.find_my_friend, que recebe 2 argumentos, queue e friend_name, e devolve a posição na fila do nome da pessoa.
<queue> é um array de pessoas que estão na fila.<friend_name> é o nome do amigo cujo índice (lugar na fila) precisas de encontrar.ColossalCoaster.find_my_friend(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve")
# => 1
Agora que os amigos já foram encontrados (na tarefa n.º 2 acima), quem chegou tarde gostaria de se juntar a eles no lugar que ocupam na fila.
Define o método ColossalCoaster.add_with_friends, que recebe 3 argumentos, queue, friend_name e person_name.
<queue> é um array de pessoas que estão na fila.<friend_name> é o nome do amigo em cuja posição a pessoa deve ser adicionada.<person_name> é o nome da pessoa a adicionar na posição do índice.Devolve a fila atualizada com o nome de quem chegou tarde.
ColossalCoaster.add_with_friends(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve", "Bucky")
# => ["Natasha", "Bucky", "Steve", "T'challa", "Wanda", "Rocket"]
Acabaste de ouvir dizer na fila que há uma pessoa mesmo mal-educada a empurrar, a gritar e a armar confusão. Tens de expulsar esse energúmeno por mau comportamento!
Define o método ColossalCoaster.remove_from_queue, que recebe 2 argumentos, queue e person_name.
<queue> é um array de pessoas que estão na fila.<person_name> é o nome da pessoa que tem de ser posta fora.Devolve a fila atualizada sem o nome da pessoa mal-educada.
ColossalCoaster.remove_from_queue(["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], "Eltran")
# => ["Natasha", "Steve", "Wanda", "Rocket"]
Por motivos administrativos, precisas de pôr todos os nomes de uma determinada fila por ordem alfabética.
Define o método ColossalCoaster.sorted_queue, que recebe 1 argumento, queue (o array de pessoas que estão na fila).
O método deve devolver uma cópia ordenada do array.
ColossalCoaster.sorted_queue(["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
# => ['Eltran', 'Natasha', 'Natasha', 'Rocket', 'Steve']
Inscreve-te no Exercism para aprenderes e dominares Crystal com 26 conceitos142 exercícios, e mentoria humana real, tudo grátis.