Un array o vettore è una struttura dati complessa usata in molti linguaggi di programmazione e chiaramente ispirata alla nozione matematica di vettore. Più precisamente, l'array è in genere classificato come un costruttore di tipo: in altre parole, esso consente di definire nuovi tipi di dati a partire da (come aggregati di valori di) tipi preesistenti. Si può immaginare un array come una sorta di casellario, le cui caselle sono dette
celle dell'array stesso. Ciascuna delle celle si comporta come una variabile tradizionale; tutte le celle sono variabili di uno stesso tipo preesistente, detto
tipo base dell'array. Si parlerà perciò di tipi come "array di interi" e "array di stringhe".
Un array è in pratica una lista ordinata di elementi; ogni posto chiamato
indice di questa lista si comporta come una variabile: è possibile conoscere a quale oggetto una particolare posizione punta e, naturalmente, farla puntare ad un oggetto differente. L'array può essere realizzato usando due parentesi quadre, con nell’esempio seguente,
parentesiQuadre.rb:
<span style="font-size:1.0em"># Arrays
# array vuoto
var1 = []
# l'array inizia con l'indice 0
puts var1[0]
# un array può contenere un singolo numero
var2 = [5]
puts var2[0]
# an array può contenere due stringhe
var3 =
puts var3[0]
puts var3[1]
flavour = 'mango'
# un array gli elementi del quale stanno puntando a tre oggetti – un float, una stringa e un array
var4 = [80.5, flavour, [true, false]]
puts var4[2]
# la virgola è ignorata
name =
puts name[0]
puts name[1]
puts name[2]
puts name[3]
# nil è un modo di Ruby per non dire niente
puts name[4]
# si possono aggiungere molti più elementi
name[4] = 'Pune'
puts name[4]
# possiamo aggiungere qualsiasi cosa!
name[5] = 4.33
puts name[5]
# è possibile aggiungere un array ad un array
name[6] = [1, 2, 3]
puts name[6]
#alcuni metodi negli array
newarr = [45, 23, 1, 90]
puts newarr.sort
puts newarr.length
#il metodo <i>each (iterator)</i> – estrae ogni elemento in lang
languages =
languages.each do |lang|
puts 'Amo ' + lang + '!'
puts 'No?'
end
# cancella un'entrata al centro e fa slittare gli altri valori
languages.delete('Mumbai')languages.each do | lang |
puts 'Amo ' + lang + '!'
puts 'No?'
end</span>
Il metodo
each permette di fare qualcosa, quando lo si desidera, ad ogni oggetto a cui l'array punta. Nell'esempio, si può accedere ad ogni oggetto nell'array senza usare alcuna numerazione. E’ importante ricordare però che:
- la variabile lang all'interno di goalposts si riferisce ad ogni elemento dell'array mentre esegue il loop;
- il do e l'end identificano un blocco di codice, che sarà eseguito per ogni elemento. I blocchi sono utilizzati in maniera estensiva in Ruby.
Ecco un esempio di metodo che ritorna un array:
array.rb<span style="font-size:1.0em">def mtdarry
10.times do | num |
square = num * num
return num, square if num > 5
end
end
num, square = mtdarry
puts num
puts square </span>
L'output è:
<span style="font-size:1.0em">
> ruby mtdarry.rb
6
36
> Exit code: 0 </span>
Il metodo
times della classe
Integer ripete un certo numero di volte lo stesso blocco, passando valori da 0 a num-1. Come si può notare, se si dà come
return parametri multipli, il metodo li inserisce in un array. Si può usare un assegnamento parallelo per collegare tra loro questi valori. La
documentazione completa sugli array è comunque disponibile on line.
"Traduzione e adattamento a cura di Francesca Beatrice Cice. La versione originale del tutorial di
Satish Talim può essere trovata su
rubylearning.com"