Come lavorare con gli array in Ruby

Introduzione

Un array è una struttura dati che rappresenta un elenco di valori, chiamati elementi. Gli array ti consentono di memorizzare più valori in una singola variabile. In Ruby, gli array possono contenere qualsiasi tipo di dato, inclusi numeri, stringhe e altri oggetti Ruby. Questo può comprimere e organizzare il tuo codice, rendendolo più leggibile e mantenibile. Tutti gli array sono oggetti con i propri metodi che puoi chiamare, fornendo un modo standardizzato per lavorare con set di dati.

In questo tutorial, creerai array, accederai ai valori che contengono, aggiungerai, modificherai e rimuoverai elementi in un array, e itererai attraverso gli elementi in un array per risolvere problemi più complessi.

Creazione di un Array

Inizierai esaminando più nel dettaglio come creare array. Come esempio, ecco un elenco di varie specie di squali. Senza un array, potresti memorizzarli in variabili individuali:

sharks.rb
shark1 = "Hammerhead"
shark2 = "Great White"
shark3 = "Tiger"

Questo approccio è verboso e può rapidamente diventare difficile da mantenere, poiché non è molto flessibile. Aggiungere un altro squalo significherebbe dover aggiungere e tenere traccia di una variabile aggiuntiva.

Se utilizzi un array, puoi semplificare questi dati. Per creare un array in un programma Ruby, utilizza le parentesi quadre: ([]), e separa i valori che desideri memorizzare con virgole:

sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger"]

Invece di creare tre variabili separate, ora hai una variabile che contiene tutti e tre gli squali. In questo esempio, hai utilizzato le parentesi quadre — [] — per creare un array e hai separato ogni voce con una virgola. Se dovessi aggiungere uno squalo aggiuntivo, lo aggiungeresti all’array anziché creare e gestire una nuova variabile.

Puoi stampare l’intero array con l’istruzione print, che visualizzerà il contenuto dell’array:

print sharks
Output
["Hammerhead", "Great White", "Tiger"]

Se desideri creare un array in cui ogni voce è una singola parola, puoi utilizzare la sintassi %w{}, che crea un array di parole:

days = %w{Monday Tuesday Wednesday Thursday Friday Saturday Sunday}

Questo è equivalente alla creazione dell’array con le parentesi quadre:

days =  ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

Tuttavia, nota che il metodo %w{} ti permette di omettere le virgolette e le virgole.

Gli array vengono spesso utilizzati per raggruppare insieme liste di tipi di dati simili, ma in Ruby gli array possono contenere qualsiasi valore o una combinazione di valori. Questo include altri array. Ecco un esempio di un array che contiene una stringa, un valore nil, un intero e un array di stringhe:

mixed_data.rb
record = [
    "Sammy",
    null,
    7,
    [
        "another",
        "array",
    ]
]

Ora vedrai come accedere ai dati memorizzati negli array.

Accesso agli elementi negli array

Per accedere a un elemento specifico, o elemento di un array, si fa riferimento al suo indice, o alla sua posizione nell’array. In Ruby, gli indici partono da zero. Per recuperare il primo elemento dal tuo array sharks, si aggiunge l’indice dell’elemento alla variabile usando le parentesi quadre:

sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger"]

L’array sharks ha tre elementi. Ecco come ogni elemento nell’array sharks è indicizzato.

Hammerhead Great White Tiger
0 1 2

Il primo elemento dell’array è Hammerhead, che è indicizzato a 0. L’ultimo elemento è Tiger, che è indicizzato a 2. Il conteggio parte da 0 negli indici, il che va contro l’intuizione naturale di cominciare a contare da 1, quindi è importante tenerlo presente finché non diventa naturale.

Nota: Potrebbe aiutarti pensare all’indice come a uno spostamento, cioè il numero di posizioni dall’inizio dell’array. Il primo elemento è all’inizio, quindi il suo spostamento, o indice, è 0. Il secondo elemento è una posizione lontana dal primo ingresso nell’array, quindi il suo spostamento, o indice, è 1.

Puoi scoprire quanti elementi ci sono in un array con il metodo length:

sharks.length
Output
3

Anche se gli indici di sharks partono da 0 e vanno a 2, la proprietà length restituisce il numero di elementi nell’array, che è 3. Non si preoccupa affatto degli indici.

Se volessi scoprire il numero di indice di un elemento specifico in un array, come Tiger, usa il metodo index():

print sharks.index("Tiger")
Output
2

Questo restituisce l’indice del primo elemento che contiene quel testo. Se non viene trovato un numero di indice, ad esempio per un valore che non esiste, la console restituirà nil:

print sharks.index("Whale")
Output
nil

Per ottenere l’ultimo elemento di un array in Ruby, usa l’indice -1:

print sharks[-1]
Output
"Tiger"

Ruby fornisce anche i metodi first e last per ottenere i primi e gli ultimi elementi senza utilizzare gli indici:

puts sharks.first
puts sharks.last
Output
"Hammerhead" "Tiger"

Se si tenta di accedere a un indice che non esiste, verrà restituito nil:

sharks[10]
Output
nil

Gli array possono contenere altri array, chiamati array nidificati. Questo è un modo per modellare insiemi di dati bidimensionali in un programma. Ecco un esempio di un array nidificato:

nested_array = [
    [
        "salmon",
        "halibut",
    ],
    [
        "coral",
        "reef",
    ]
]

Per accedere agli elementi di un array nidificato, aggiungi un altro numero di indice che corrisponda all’array interno. Ad esempio, per recuperare il valore coral da questo array nidificato, userebbe il seguente comando:

print nested_array[1][0];
Output
coral

In questo esempio, hai acceduto all’array in posizione 1 della variabile nested_array, che ha restituito l’array ["coral", "reef"]. Quindi hai acceduto agli elementi in posizione 0 di quell’array, che era "coral".

Ora vedrai come aggiungere elementi a un array.

Aggiungere elementi agli array

Hai tre elementi nel tuo array squali, che sono indicizzati da 0 a 2:

sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger"]

Ecco alcuni modi per aggiungere un nuovo elemento. Potresti assegnare un valore all’indice successivo, che in questo caso sarebbe 3:

sharks[3] = "Whale";

print sharks
Output
["Hammerhead", "Great White", "Tiger", "Whale"]

Questo metodo è però soggetto a errori. Se aggiungi un elemento e salti accidentalmente un indice, creerà un elemento nil nell’array.

sharks[5] = "Sand";

print sharks;
Output
["Hammerhead", "Great White", "Tiger", "Whale", nil, "Sand"]

Tentare di accedere all’elemento extra dell’array restituirà il suo valore, che sarà nil:

sharks[4]
Output
nil

Trovare il prossimo indice disponibile in un array è soggetto a errori e richiede tempo extra. Evita errori utilizzando il metodo push, che aggiunge un elemento alla fine di un array:

sharks.push("Thresher")
print sharks
Output
["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher"]

Puoi anche usare la sintassi << invece del metodo push per aggiungere un elemento alla fine di un array:

sharks << "Bullhead"
Output
["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", "Bullhead"]

Per aggiungere un elemento all’inizio di un array, usa il metodo unshift():

sharks.unshift("Angel")
print sharks
Output
["Angel", "Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", "Bullhead"]

Ora che sai come aggiungere elementi, vedrai come rimuoverli.

Rimozione degli elementi dagli array

Per rimuovere un elemento specifico da un array, usa i metodi delete o delete_at. Nell’array sharks, hai creato in precedenza un elemento array nil. Ora lo eliminerai.

Prima, trova la sua posizione nell’array. Puoi usare il metodo index per farlo:

print sharks.index(nil)
Output
4

Poi usa delete_at per rimuovere l’elemento all’indice 4 e stampare l’array:

sharks.delete_at(4)
print sharks
Output
["Angel", "Hammerhead", "Great White", "Tiger", "Whale", "Thresher", "Bullhead"]

Il metodo delete rimuove gli elementi da un array che corrispondono al valore che passi. Usalo per rimuovere Whale dall’array:

sharks.delete("Whale")
print sharks;
Output
["Angel", "Hammerhead", "Great White", "Tiger", "Thresher", "Bullhead"]

Il metodo delete rimuoverà tutte le occorrenze del valore che passi, quindi se il tuo array ha elementi duplicati, saranno tutti rimossi.

Il metodo pop rimuoverà l’ultimo elemento in un array:

sharks.pop
print sharks;
Output
["Angel", "Hammerhead", "Great White", "Tiger", "Thresher"]

Bullhead è stato rimosso come ultimo elemento dell’array. Per rimuovere il primo elemento dell’array, usa il metodo shift:

sharks.shift
print sharks
Output
["Hammerhead", "Great White", "Tiger", "Thresher"]

Questa volta, Angel è stato rimosso dall’inizio dell’array.

Utilizzando pop e shift, puoi rimuovere gli elementi dall’inizio e dalla fine degli array. È preferibile utilizzare pop quando possibile, poiché gli altri elementi nell’array mantengono i loro indici originali.

I metodi delete_at, pop e shift modificano tutti l’array originale e restituiscono l’elemento che hai eliminato::

sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
deleted_at_element = sharks.delete_at(1)
popped_element = sharks.pop

puts "Deleted_at element: #{deleted_at_element}"
puts "Popped element: #{popped_element}"

puts "Remaining array: #{sharks}"
Output
Deleted_at element: Great White Popped element: Whale Remaining array: ["Hammerhead", "Tiger"]

Ora conosci diversi modi per rimuovere elementi da un array. Ora vedrai come modificare l’elemento che hai già.

Modifica degli elementi esistenti negli array

Per aggiornare un elemento nell’array, assegna un nuovo valore all’indice dell’elemento usando l’operatore di assegnazione, proprio come faresti con una variabile regolare.

Dato un nuovo array di squali, con "Hammerhead" all’indice 0, sostituirai "Hammerhead" con "Angelo":

sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks[0] = "Angel"
print sharks;
Output
["Angel", "Great White", "Tiger", "Whale"]

Per assicurarti di aggiornare l’elemento giusto, potresti utilizzare il metodo index per individuare prima l’elemento, proprio come hai fatto per trovare l’elemento che volevi eliminare.

Ora vedrai come lavorare con tutti gli elementi nell’array.

Iterare sugli array

Ruby fornisce molti modi per iterare su un array, e il metodo che usi dipende dal tipo di lavoro che vuoi svolgere. Ora esplorerai come iterare su un array e visualizzare ciascuno dei suoi elementi.

Ruby fornisce la sintassi for..in:

sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
for shark in sharks do
  puts shark
end

Per ogni elemento nell’array sharks, Ruby assegna quell’elemento alla variabile locale shark. Puoi quindi stampare il valore dell’elemento usando puts.

Non vedrai spesso for..in però. Gli array di Ruby sono oggetti e forniscono il metodo each per lavorare con gli elementi. Il metodo each funziona in modo simile a for..in, ma ha una sintassi diversa:

each.rb
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks.each do |shark|
  puts shark
end

Il metodo each utilizza una sintassi che vedrai spesso nella programmazione Ruby. Prende un blocco Ruby come suo argomento. Un blocco è un codice che verrà eseguito successivamente nel contesto del metodo. In questo caso, il codice è puts shark. La parola chiave shark, racchiusa tra i caratteri di tubo (|), è la variabile locale che rappresenta l’elemento nell’array a cui il blocco accederà. Ruby assegna l’elemento a questa variabile ed esegue il codice nel blocco. Il metodo each ripete questo processo per ogni elemento nell’array:

Output
Hammerhead Great White Tiger Whale

Quando il blocco è composto da una sola riga, spesso si vede che gli sviluppatori Ruby sostituiscono le parole chiave do e end con le parentesi graffe e condensano l’intera istruzione in una sola riga:

each.rb
...
sharks.each {|shark| puts shark }

Questo produce gli stessi risultati, ma utilizza meno righe di codice.

Il metodo each_with_index funziona in modo simile, ma ti dà anche accesso all’indice dell’elemento nell’array. Questo programma utilizza each_with_index per stampare l’indice e il valore di ogni elemento:

each_with_index.rb
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks.each_with_index do |shark, index|
  puts "The index is #{index}"
  puts "The value is #{shark}"
end

Per ogni elemento nell’array, Ruby assegna l’elemento alla variabile shark e assegna l’indice corrente alla variabile index. Puoi quindi fare riferimento a entrambe queste variabili nel blocco.

Output
The index is 0 The value is Hammerhead The index is 1 The value is Great White The index is 2 The value is Tiger The index is 3 The value is Whale

Itererai spesso sugli elementi in un array nei tuoi programmi, ad esempio quando devi visualizzare gli elementi di un database su un sito web o quando leggi righe da un file e ne elabori il contenuto.

Conclusione

Gli array sono una parte estremamente versatile e fondamentale della programmazione in Ruby. In questo tutorial, hai creato array e acceduto agli elementi individuali. Hai anche aggiunto, rimosso e modificato elementi in un array. Infine, hai esplorato due modi per iterare su un array e visualizzarne i contenuti, che viene utilizzato come un metodo comune per visualizzare i dati.

Scopri altri tipi di dati in Ruby leggendo il tutorial Comprensione dei Tipi di Dati in Ruby.

Source:
https://www.digitalocean.com/community/tutorials/how-to-work-with-arrays-in-ruby