Il framework Microsoft .NET e di conseguenza PowerShell, così come molti altri ambienti di sviluppo, consente di utilizzare un tipo simile all'array ma dotato di caratteristiche e funzionalità aggiuntive, chiamato array associativo (oppure tabella hash).
La differenza principale tra questi due tipi consiste nel fatto che negli array ogni elemento è individuabile unicamente tramite un indice numerico mentre negli array associativi l’indice può essere, esso stesso, di un tipo qualsiasi. Questa maggiore libertà di espressione permette agli array associativi di essere estremamente utili in tutte quelle situazioni dove si ha la necessità di creare correlazioni tra alcuni oggetti ed altri e, successivamente, poterle recuperare e gestire agevolmente.
La creazione
Per creare un array associativo all’interno di PowerShell è sufficiente utilizzare un costrutto simile a quello impiegato per l’operatore di sottoespressione di array, con la differenza che, anziché far seguire al simbolo di a commerciale (@) delle parentesi tonde, sono usate due parentesi graffe: il risultato di questa operazione è un’istanza del tipo System.Collections.Hashtable.
La creazione di questi oggetti fa capo, quindi, allo schema sintattico che segue:
$hash = @{}
Come anticipato, ogni array associativo è in grado di contenere delle correlazioni tra oggetti: ciascuna correlazione è composta da un primo oggetto che funge da chiave e da un secondo che rappresenta il valore individuato da tale chiave. A differenza di un ipotetico dizionario, però, limitato a contenere delle stringhe sia nelle chiavi che nei valori, il sistema non pone alcun vincolo sul tipo di dati da impiegare, in entrambi i casi: l’unica limitazione consiste negli oggetti impiegati come chiavi, che devono essere univoci all’interno della struttura.
Sebbene ci siano diversi modi, come analizzato nel resto del capitolo, per aggiungere delle correlazioni ad un array associativo esistente, la shell offre la possibilità di includerle anche durante la creazione di questi oggetti: avvalendosi del costrutto illustrato in precedenza, infatti, è possibile includere una serie di coppie chiave–valore direttamente all’interno della coppia di parentesi graffe della struttura sintattica. Ogni correlazione, separata dall’eventuale successiva tramite il simbolo punto e virgola (;), è rappresentata da un’uguaglianza tra l’oggetto che si desidera utilizzare come chiave e quello che si desidera far diventare il valore associato a quest’ultima.
La sintassi completa del costrutto utilizzato per creare array associativi, dunque, è rappresentata da questo schema:
$hash = @{ <chiave> = <valore>; [<chiave> = <valore>;] ... }
Nello script che segue, ad esempio, viene creato un array associativo per correlare il nome di alcuni gas nobili con i rispettivi numeri atomici:
$nobleGases = @{ 'Elio' = 2; 'Neon' = 10; 'Argon' = 18 }
Le chiavi utilizzate per creare correlazioni sono perlopiù delle stringhe ma nulla vieta di utilizzare altri tipi di oggetto; questo script, ad esempio, crea un array associativo utilizzando chiavi (e valori) di tipo eterogeneo:
$hash = @{ 100 = 'Cento'; (Get-Date) = 123; 'Processes' = (Get-Process) }
Vista la frequenza con cui le chiavi sono rappresentate da stringhe, tuttavia, la shell consente in questa circostanza di omettere gli apici ('), a patto che la stringa non contenga spazi.
Il blocco illustrato poc’anzi, pertanto, può essere riscritto in modo più “naturale”, ottenendo il medesimo risultato:
$nobleGases = @{ Elio = 2; Neon = 10; Argon = 18 }