2012-11-10 14 views
11

Io Non abbiamo ancora molta esperienza PowerShell e sto cercando di insegnare a me stesso come vado avanticome aggiungere dinamicamente elementi di array in PowerShell

che sto cercando di fare un po 'codice di prova per un progetto più grande , l'obiettivo principale qui è troppo dinamicamente creare e aggiungere elementi a un array usando una funzione.

Ecco il mio codice:

$testArray = @() 
function addToArray($Item1) 
{ 
    $testArray += $Item1 
    "###" 
} 

$tempArray = "123", "321", "453" 
$foldertest = "testFolder" 

foreach($item in $tempArray) 
{ 
    addToArray $item 
} 
"###" 

ogni volta che la funzione termina l'array diventa vuota. la maggior parte della mia esperienza di programmazione proviene da java, php, alcuni C e C++ solo per nominarne alcuni, se l'ho fatto in php (aggiustando la sintassi del linguaggio ovviamente) questo avrebbe funzionato bene

+1

Perché non usare invece una lista? Gli array non sono mai stati concepiti per essere gestiti dinamicamente. Ogni volta che ridimensioni un array, ne crea uno nuovo sotto il cofano. Quindi ottieni il sovraccarico proporzionale alle sue dimensioni. – Neolisk

+0

grazie per il consiglio neolisk, ci ho pensato, ci provo. – icomeinpieces

risposta

6
$testArray = [System.Collections.ArrayList]@() 
$tempArray = "123", "321", "453" 

foreach($item in $tempArray) 
{ 
    $arrayID = $testArray.Add($item) 
} 
10

Il problema è uno di scopo; all'interno della funzione addToArray modificare la riga a questo:

$script:testArray += $Item1 

... per memorizzare nella variabile di matrice che si aspetta.

+2

grazie per l'aiuto, questo metodo ha funzionato per me. – icomeinpieces

+0

Anche qui, grazie! – JoeRod

+2

Si noti che lo svantaggio di questo metodo è che crea una copia in memoria dell'intero array esistente con il nuovo elemento al suo interno. In altre parole, è l'uso della memoria O (2n). Se lo fai molto o con array molto grandi, diventa molto costoso. Usando un ArrayList riutilizza lo stesso oggetto e aggiunge l'oggetto direttamente. –

0

Invece di ricreare l'array in ogni iterazione del ciclo (che è fondamentalmente quello che sta succedendo ogni volta che si aggiunge ad esso), assegnare il risultato del ciclo ad una variabile:

$testArray = foreach($item in $tempArray) 
{ 
    addToArray $item 
} 
+0

grazie per il consiglio che potrei provare la prossima volta che vado a fare uno script complesso – icomeinpieces

Problemi correlati