Los arrays son una estructura de datos habitual con la que trabajar. Por ello, existe una colección de métodos que se pueden usar para trabajar con arrays. Entre ellos se incluyen ordenar, invertir, insertar y muchos más.
Algunos de estos métodos son destructivos, lo que significa que modifican el array original. Otros no son destructivos, es decir, devuelven un nuevo array y no modifican el original.
Estos son algunos de los métodos más comunes que se pueden usar al trabajar con arrays:
Cuando insertas un elemento en un array, puedes usar el método insert, que toma un índice y un elemento como argumentos.
El elemento se insertará en el índice especificado y el resto del array se desplazará a la derecha.
Si el índice está fuera de los límites, se lanzará un IndexError.
numbers = [1, 2, 3]
numbers.insert(1, 4)
numbers # => [1, 4, 2, 3]
numbers.insert(5, 5) # => Error: Index out of bounds (IndexError)
Cuando quieres eliminar un elemento concreto de un array, puedes usar el método delete, que toma un elemento como argumento.
El método devuelve el elemento que se eliminó.
Si el elemento no existe en el array, se devolverá nil.
numbers = [1, 2, 3]
numbers.delete(2) # => 2
numbers # => [1, 3]
Cuando quieres obtener el primer o el último elemento de un array, puedes usar los métodos first y last.
Estos métodos aceptan un argumento opcional que especifica cuántos elementos devolver.
Pueden mejorar la legibilidad en comparación con usar el índice 0 o -1, o con usar un rango.
Si el array está vacío, se lanzará un 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)
Cuando quieres invertir un array, puedes usar el método reverse, que devuelve un nuevo array con los elementos en orden inverso.
Es importante tener en cuenta que reverse devuelve un nuevo array y no modifica el array original.
Si quieres modificar el array original, añade un ! al final del nombre del método.
numbers = [1, 2, 3]
numbers.reverse # => [3, 2, 1]
numbers # => [1, 2, 3]
numbers.reverse! # => [3, 2, 1]
numbers # => [3, 2, 1]
+)El método append (<<) es útil cuando quieres añadir objetos a un array.
Sin embargo, cuando combinas dos arrays, puedes usar el operador +, que devuelve un nuevo array con los elementos de ambos arrays.
[1, 2] + [3, 4] # => [1, 2, 3, 4]
Si añades un array a otro array, el array se añadirá como un único elemento.
[1, 2] << [3, 4] # => [1, 2, [3, 4]]
Cuando quieres comprobar si un array está vacío, puedes usar el método empty?, que devuelve true si el array está vacío y false en caso contrario.
Esto mejora la legibilidad en comparación con comprobar la longitud del array contra 0.
[].empty? # => true
[1, 2, 3].empty? # => false
Cuando quieres obtener el índice de un elemento en un array, puedes usar el método index, que toma un elemento como argumento.
Si el elemento no existe en el array, se devolverá nil.
numbers = [1, 2, 3]
numbers.index(2) # => 1
Cuando quieres saber cuántos elementos tiene un array, puedes usar el método size.
numbers = [1, 2, 3]
numbers.size # => 3
Cuando quieres contar el número de veces que un elemento está presente en un array, puedes usar el método count.
fruits = ["apple", "banana", "apple"]
fruits.count("apple") # => 2
fruits.count("banana") # => 1
fruits.count("watermelon") # => 0
Cuando quieres ordenar un array, puedes usar el método sort, que devuelve un nuevo array con los elementos ordenados.
Al igual que con reverse, este método devuelve un nuevo array y no modifica el 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 es propietaria de un parque temático muy popular. Solo tiene una atracción, en el centro mismo de unos terrenos bellamente ajardinados: La Montaña Rusa Más Grande del Mundo(TM). Aunque solo hay esta atracción, gente de todo el mundo viaja hasta allí y hace cola durante horas para tener la oportunidad de subir a la hypercoaster de Chaitana.
Hay dos colas para esta atracción, cada una representada como un array:
Te han pedido que escribas algo de código para gestionar mejor a los visitantes del parque. Tienes que implementar las siguientes funciones lo antes posible, antes de que los visitantes (¡y tu jefa, Chaitana!) se pongan de mal humor.
Define el método ColossalCoaster.add_to_queue, que recibe 4 argumentos <express_queue>, <normal_queue>, <ticket_type>, <person_name> y devuelve la cola correspondiente actualizada con el nombre de la persona.
<ticket_type> es un Int32, donde 1 == express_queue y 0 == normal_queue.<person_name> es el nombre (como String) de la persona que se va a añadir a la cola correspondiente.express_queue = ["Tony", "Bruce"]
normal_queue = ["RobotGuy", "WW"]
ColossalCoaster.add_to_queue(express_queue, normal_queue, 1, "RichieRich")
# => ["Tony", "Bruce", "RichieRich"]
Una persona ha llegado tarde al parque, pero quiere ponerse en la cola donde están esperando sus amigos. El problema es que no tiene ni idea de dónde están y no hay cobertura para llamarlos.
Define el método ColossalCoaster.find_my_friend, que recibe 2 argumentos, queue y friend_name, y devuelve la posición en la cola del nombre de la persona.
<queue> es un array de personas que están en la cola.<friend_name> es el nombre del amigo cuyo índice (su lugar en la cola) tienes que encontrar.ColossalCoaster.find_my_friend(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve")
# => 1
Ahora que ya se ha encontrado a sus amigos (en la tarea 2 de arriba), a quien llegó tarde le gustaría ponerse con ellos en su lugar de la cola.
Define el método ColossalCoaster.add_with_friends, que recibe 3 argumentos: queue, friend_name y person_name.
<queue> es un array de personas que están en la cola.<friend_name> es el nombre del amigo en cuya posición se debe añadir a la persona.<person_name> es el nombre de la persona que hay que añadir en esa posición del índice.Devuelve la cola actualizada con el nombre de quien llegó tarde.
ColossalCoaster.add_with_friends(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve", "Bucky")
# => ["Natasha", "Bucky", "Steve", "T'challa", "Wanda", "Rocket"]
Acabas de oír en la cola que hay una persona muy antipática que empuja, grita y arma jaleo. ¡Tienes que echar a ese sinvergüenza por su mal comportamiento!
Define el método ColossalCoaster.remove_from_queue, que recibe 2 argumentos, queue y person_name.
<queue> es un array de personas que están en la cola.<person_name> es el nombre de la persona que hay que expulsar.Devuelve la cola actualizada sin el nombre de la persona antipática.
ColossalCoaster.remove_from_queue(["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], "Eltran")
# => ["Natasha", "Steve", "Wanda", "Rocket"]
Por motivos administrativos, necesitas obtener todos los nombres de una cola dada en orden alfabético.
Define el método ColossalCoaster.sorted_queue, que recibe 1 argumento, queue (el array de personas que están en la cola).
El método debe devolver una copia ordenada del array.
ColossalCoaster.sorted_queue(["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
# => ['Eltran', 'Natasha', 'Natasha', 'Rocket', 'Steve']
Regístrate en Exercism para aprender y dominar Crystal con 26 conceptos142 ejercicios y mentoría humana real, todo gratis.