Gli array sono una struttura dati comune con cui si lavora spesso. Per questo motivo esiste una raccolta di metodi che si possono usare per gestirli. Tra questi ci sono l'ordinamento, l'inversione, l'inserimento e molti altri.
Alcuni di questi metodi sono distruttivi, il che significa che modificano l'array originale. Altri sono non distruttivi, cioè restituiscono un nuovo array e non modificano quello originale.
Ecco alcuni dei metodi più comuni che si possono usare quando si lavora con gli array:
Quando inserisci un elemento in un array, puoi usare il metodo insert, che accetta un indice e un elemento come argomenti.
L'elemento viene inserito all'indice specificato e il resto dell'array viene spostato a destra.
Se l'indice è fuori dai limiti, viene sollevato 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)
Quando vuoi eliminare un elemento specifico da un array, puoi usare il metodo delete, che accetta un elemento come argomento.
Il metodo restituisce l'elemento rimosso.
Se l'elemento non esiste nell'array, viene restituito nil.
numbers = [1, 2, 3]
numbers.delete(2) # => 2
numbers # => [1, 3]
Quando vuoi ottenere il primo o l'ultimo elemento di un array, puoi usare i metodi first e last.
Questi metodi accettano un argomento opzionale che specifica quanti elementi restituire.
Possono migliorare la leggibilità rispetto all'uso dell'indice 0 o -1, oppure di un intervallo.
Se l'array è vuoto, viene sollevato 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)
Quando vuoi invertire un array, puoi usare il metodo reverse, che restituisce un nuovo array con gli elementi in ordine inverso.
È importante notare che reverse restituisce un nuovo array e non modifica l'array originale.
Se vuoi modificare l'array originale, aggiungi un ! alla fine del nome del metodo.
numbers = [1, 2, 3]
numbers.reverse # => [3, 2, 1]
numbers # => [1, 2, 3]
numbers.reverse! # => [3, 2, 1]
numbers # => [3, 2, 1]
+)Il metodo di aggiunta (<<) è utile quando vuoi aggiungere oggetti a un array.
Tuttavia, quando combini due array, puoi usare l'operatore +, che restituisce un nuovo array con gli elementi di entrambi.
[1, 2] + [3, 4] # => [1, 2, 3, 4]
Se aggiungi un array a un altro array, l'array viene aggiunto come singolo elemento.
[1, 2] << [3, 4] # => [1, 2, [3, 4]]
Per verificare se un array è vuoto, puoi usare il metodo empty?, che restituisce true se l'array è vuoto e false altrimenti.
Questo migliora la leggibilità rispetto a confrontare la lunghezza dell'array con 0.
[].empty? # => true
[1, 2, 3].empty? # => false
Quando vuoi ottenere l'indice di un elemento in un array, puoi usare il metodo index, che accetta un elemento come argomento.
Se l'elemento non esiste nell'array, viene restituito nil.
numbers = [1, 2, 3]
numbers.index(2) # => 1
Quando vuoi sapere il numero di elementi in un array, puoi usare il metodo size.
numbers = [1, 2, 3]
numbers.size # => 3
Quando vuoi contare quante volte un elemento è presente in un array, puoi usare il metodo count.
fruits = ["apple", "banana", "apple"]
fruits.count("apple") # => 2
fruits.count("banana") # => 1
fruits.count("watermelon") # => 0
Quando vuoi ordinare un array, puoi usare il metodo sort, che restituisce un nuovo array con gli elementi ordinati.
Come con reverse, questo metodo restituisce un nuovo array e non modifica l'array originale.
numbers = [3, 2, 1]
numbers.sort # => [1, 2, 3]
numbers # => [3, 2, 1]
numbers.sort! # => [1, 2, 3]
numbers # => [1, 2, 3]
Chaitana possiede un parco divertimenti molto popolare. Ha una sola attrazione, proprio al centro di un terreno dal paesaggio curatissimo: The Biggest Roller Coaster in the World(TM). Anche se c'è solo questa attrazione, arrivano persone da tutto il mondo e fanno la fila per ore pur di avere la possibilità di salire sull'hypercoaster di Chaitana.
Ci sono due code per questa attrazione, ognuna rappresentata da un array:
Ti è stato chiesto di scrivere del codice per gestire meglio gli ospiti del parco. Devi implementare le seguenti funzioni il prima possibile, prima che gli ospiti (e la tua capa, Chaitana!) si innervosiscano.
Definisci il metodo ColossalCoaster.add_to_queue, che accetta 4 argomenti <express_queue>, <normal_queue>, <ticket_type>, <person_name> e restituisce la coda appropriata aggiornata con il nome della persona.
<ticket_type> è un Int32 dove 1 == express_queue e 0 == normal_queue.<person_name> è il nome (come String) della persona da aggiungere alla coda corrispondente.express_queue = ["Tony", "Bruce"]
normal_queue = ["RobotGuy", "WW"]
ColossalCoaster.add_to_queue(express_queue, normal_queue, 1, "RichieRich")
# => ["Tony", "Bruce", "RichieRich"]
Una persona è arrivata tardi al parco, ma vuole mettersi nella coda dove aspettano i suoi amici. Però non ha idea di dove si trovino e non c'è campo per telefono per chiamarli.
Definisci il metodo ColossalCoaster.find_my_friend, che accetta 2 argomenti queue e friend_name e restituisce la posizione nella coda del nome della persona.
<queue> è un array di persone che stanno in coda.<friend_name> è il nome dell'amico di cui devi trovare l'indice (la posizione nella coda).ColossalCoaster.find_my_friend(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve")
# => 1
Ora che i suoi amici sono stati trovati (nel compito 2 qui sopra), il ritardatario vorrebbe unirsi a loro nella loro posizione in coda.
Definisci il metodo ColossalCoaster.add_with_friends, che accetta 3 argomenti queue, friend_name e person_name.
<queue> è un array di persone che stanno in coda.<friend_name> è il nome dell'amico nella cui posizione va aggiunta la persona.<person_name> è il nome della persona da aggiungere in quella posizione di indice.Restituisci la coda aggiornata con il nome del ritardatario.
ColossalCoaster.add_with_friends(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve", "Bucky")
# => ["Natasha", "Bucky", "Steve", "T'challa", "Wanda", "Rocket"]
Hai appena saputo dalla coda che c'è una persona davvero maleducata che spinge, urla e crea problemi. Devi cacciare quel mascalzone per il suo comportamento!
Definisci il metodo ColossalCoaster.remove_from_queue, che accetta 2 argomenti queue e person_name.
<queue> è un array di persone che stanno in coda.<person_name> è il nome della persona da cacciare.Restituisci la coda aggiornata senza il nome della persona maleducata.
ColossalCoaster.remove_from_queue(["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], "Eltran")
# => ["Natasha", "Steve", "Wanda", "Rocket"]
Per motivi amministrativi, devi ottenere tutti i nomi di una determinata coda in ordine alfabetico.
Definisci il metodo ColossalCoaster.sorted_queue, che accetta 1 argomento, queue (l'array di persone che stanno in coda).
Il metodo deve restituire una copia ordinata dell'array.
ColossalCoaster.sorted_queue(["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
# => ['Eltran', 'Natasha', 'Natasha', 'Rocket', 'Steve']
Iscriviti a Exercism per imparare e padroneggiare Crystal con 26 concetti142 esercizi e il mentoring di persone reali, tutto gratis.