Come modificare un array in un ciclo for-each di PowerShell
Se ho un array PowerShell:
ed ho la necessità di modificare tutti i valori, la cosa che viene naturale pensare è un ciclo di questo tipo
pur venendo stampato il nuovo valore (write-host), l'array non viene modificato in quanto $_ rappresenta il valore locale dell'iterazione ma non un riferimento alla posizione dell'array.
Un possibile approccio per raggiungere lo scopo è questo:
In questo caso l'array vivene modificato.
Questo perchè costruisco una sequenza di numeri (0..($arr.length-1)) lunga quanto gli elementi dell'array e che poi uso per accedere all'array $arr[$_] ($_ rappresenta solo l'indice).
Lo stesso scopo lo raggiungo anche con il classico ciclo for:
PowerShell
$arr = @("a", "b", "c")
PowerShell
$arr | % { $_ = $_ + " - aggiungo una stringa"; write-host $_ }
Un possibile approccio per raggiungere lo scopo è questo:
PowerShell
(0..($arr.length-1)) | % {$arr[$_] = $arr[$_] + " - aggiungo una stringa"; }
$arr
Questo perchè costruisco una sequenza di numeri (0..($arr.length-1)) lunga quanto gli elementi dell'array e che poi uso per accedere all'array $arr[$_] ($_ rappresenta solo l'indice).
Lo stesso scopo lo raggiungo anche con il classico ciclo for:
PowerShell
for($i = 0; $i -lt $arr.length; $i++) {$arr[$i] = $arr[$i] + " - aggiungo una stringa"; }
$arr