Los arrays son una estructura de datos común con la que trabajar. Por eso, existe una colección de métodos que puedes usar para trabajar con arrays. Entre ellos hay métodos para ordenar, invertir, insertar y mucho más.
Algunos de estos métodos son destructivos, lo que significa que modifican el array original. Otros son no destructivos, es decir, devuelven un nuevo array y no modifican el original.
Estos son algunos de los métodos más comunes que puedes usar cuando trabajas 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á hacia 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 específico 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 toman 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 notar que reverse devuelve un nuevo array y no modifica el array original.
Si quieres modificar el array original, agrega 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 para agregar (<<) 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 agregas un array a otro array, el array se añadirá como un solo 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 la cantidad de elementos en un array, puedes usar el método size.
numbers = [1, 2, 3]
numbers.size # => 3
Cuando quieres contar cuántas veces está presente un elemento 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 dueña 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 existe esta atracción, gente de todo el mundo viaja y hace cola durante horas por la oportunidad de subirse a la hipermontaña rusa 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. Necesitas 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 un String) de la persona que se agregará 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 llegó tarde al parque, pero quiere unirse a la cola donde esperan sus amigos. El problema es que no tiene idea de dónde están parados sus amigos y no hay señal de teléfono 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 paradas en la cola.<friend_name> es el nombre del amigo cuyo índice (lugar en la cola) necesitas encontrar.ColossalCoaster.find_my_friend(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve")
# => 1
Ahora que ya se encontraron sus amigos (en la tarea 2 de arriba), la persona que llegó tarde quiere unirse a 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 paradas en la cola.<friend_name> es el nombre del amigo en cuya posición se debe agregar a la persona.<person_name> es el nombre de la persona que se agregará en la posición del índice.Devuelve la cola actualizada con el nombre de la persona que llegó tarde.
ColossalCoaster.add_with_friends(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve", "Bucky")
# => ["Natasha", "Bucky", "Steve", "T'challa", "Wanda", "Rocket"]
Acabas de escuchar en la cola que hay una persona realmente desagradable que empuja, grita y causa problemas. ¡Tienes que expulsar 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 paradas en la cola.<person_name> es el nombre de la persona que hay que echar.Devuelve la cola actualizada sin el nombre de la persona desagradable.
ColossalCoaster.remove_from_queue(["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], "Eltran")
# => ["Natasha", "Steve", "Wanda", "Rocket"]
Por razones administrativas, necesitas obtener todos los nombres de una cola determinada en orden alfabético.
Define el método ColossalCoaster.sorted_queue, que recibe 1 argumento, queue (el array de personas paradas 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.