Un array può essere visto come una lista di oggetti non necessariamente dello stesso tipo. Gli array sono istanze della classe Array
e vanno dunque creati nel seguente modo:
arr = Array.new
in alternativa è possibile creare un array anche scrivendo semplicemente:
arr = []
in entrambi i casi creeremo un array vuoto. Se invece si deve creare un array non vuoto è possibile passare una lista di valori separati da virgole:
arr = [1, 2, "tre", "IV"]
in questo modo abbiamo creato un array di quattro elementi, due interi e due stringhe. È possibile chiamare il metodo new
anche con uno o due parametri, il primo indica le dimensioni dell'array mentre il secondo il valore di inizializzazione:
> arr = Array.new(3) => [nil, nil, nil] arr = Array.new(3, 100) => [100, 100, 100]
Per le altre forme del metodo new
rimando alla documentazione ufficiale.
Per inserire nuovi elementi nell'array o per modificare quelli esistenti si utilizza il metodo []=
> arr = [1, 2, 2] => [1, 2, 2] > arr[2] = 3 => 3 > arr => [1, 2, 3]
Si può anche indicare un indice superiore alle dimensioni dell'array, in tal caso l'array si estende automaticamente e gli elementi compresi tra il l'indice indicato e l'ultimo elemento dell'array sono impostate a nil:
> arr[8] = 9 => 9 > arr => [1, 2, 3, nil, nil, nil, nil, nil, 9]
Come indice è possibile indicare due interi che rappresentano rispettivamente l'indice di inizio e il numero di elementi da sostituire con il valore passato:
> arr = [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5] > arr[0,2] = ["I", "II"] => ["I", "II"] > arr => ["I", "II", 3, 4, 5] > arr[2,3] = "III" => "III" > arr => ["I", "II", "III"]
in questo modo abbiamo creato un array di cinque elementi e poi abbiamo sostituito i primi due (indice 0 e numero di elementi 2) con i valore "I" e "II". Abbiamo infine sostituito i restanti tre elementi con il valore "III". Analogamente può essere usato anche un range con ovvio significato, l'esempio precedente può essere riscritto così:
> arr = [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5] > arr[0..1] = ["I", "II"] => ["I", "II"] > arr => ["I", "II", 3, 4, 5] > arr[2..4] = "III" => "III" > arr => ["I", "II", "III"]
Per il resto, per quel che riguarda i range, valgono le stesse proprietà già viste per le stringhe.
L'accesso agli elementi avviene attraverso il metodo [], o il metodo slice che prevede anche una forma distruttiva slice!
che elimina dall'array gli elementi indicati dall'indice. Come per []=, anche [], può prendere come argomenti un intero, oppure due interi o infine un range.