Gli array sono come gli scaffali: puoi mettere tutto quello che vuoi sullo scaffale, puoi contare le cose che ci sono, puoi vedere se c’è spazio per metterci altro e così via. Da programmatori vediamo un esempio.
my_array = [] my_array << "Qualcosa" my_array << 123 my_array << Time.now my_array.each do |elemento| puts elemento end
La prima riga my_array = []
dichiara un array chiamato my_array
, è vuoto, come si vede da []
.
Una volta creato l’array può essere popolato (riempito), cosa che facciamo alle righe 2, 3, 4. Per inserire dati nell’array usiamo l’operatore <<
.
Gli array in Ruby sono diversi da quelli degli altri linguaggi di programmazione, nel senso che possono contenere dati non omogenei. Nel nostro caso il primo elemento contiene una stringa, il secondo un numero (intero) e il terzo il nome di una funzione.
le righe 6-8 indicano un ciclo do-end
che attraversa l’array con il metodo each
(sarebbe ciascuno).
La prima riga dello script my_array = []
è possibile riscriverla così:
my_array = Array.new
che fa esattamente la stessa cosa. Quale usare? quella che vi piace di più 😀
Ma non basta: anche il ciclo do-end
può essere rimpiazzato con un ciclo for-end
:
my_array = Array.new my_array << "Qualcosa" my_array << 123 my_array << Time.now for elemento in my_array puts elemento end
L’output è uguale al precedente, anzi no: cambia l’ora. (come passa il tempo!).
C’è un terzo modo di creare un array, così:
my_array = ["Qualcosa", 123, Time.now]
In questo caso la dichiarazione dell’array è contemporanea al suo popolamento. E non basta: possiamo stampare l’array con una sola istruzione, senza cicli, utilizzando il metodo join
:
my_array = ["Qualcosa", 123, Time.now] puts my_array.join("\n")
Al solito l’output è simile ai precedenti.
Vediamo altre cose relative agli array. Con length
possiamo sapere quanti elementi contiene l’array:
nel nostro caso 3 elementi. Abbiamo già visto join
:
restituisce la stringa unione degli elementi, separati dalla stringa passatagli come argomento.
Per aggiungere elementi all’array possiamo usare push
Nota: le parentesi di push
sono facoltative.
L’opposto di push
è pop
che restituisce l’ultimo elemento dell’array e lo rimuove dallo stesso
Gli elementi dell’array sono indicizzati:
Sì, gli indici partono da 0
. Se si chiede un elemento con indice troppo grande (> lehgth – 1) si ottiene nil
.
pop
accetta un parametro numerico. Se presente verrà estratto quel numero di elementi:
al solito le parentesi per pop
sono facoltative.
push
accetta più parametri
Al posto di push
si può usare <<
, un solo elemento per volta.
i metodi min
e max
fanno quello che ci si aspetta
naturalmente quando la cosa ha senso
cioè mai mischiare le mele con le pere, tranne nel blog dell’amico Jean, lui può 🙂
Gli array possono essere visti come set (insiemi). Per cui è possibile estrarre l’intersezione (con &
) e l’unione (con +
) di due array:
Nel nostro caso l’unione era disordinata. Ma c’è sempre sort
.
E tanto altro ancora 😉