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:
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 = ["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:
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 = ["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
Output3
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")
Output2
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")
Outputnil
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]
Outputnil
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];
Outputcoral
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 = ["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]
Outputnil
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)
Output4
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 = ["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}"
OutputDeleted_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:
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:
OutputHammerhead
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:
...
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:
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.
OutputThe 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