Étant donné un tableau comme celui-ci
$tempArray = @()
$count = 1
foreach ($item in $array) {
$tempArray += "$item $count"
$count ++
}
$array = $tempArray
Je peux ajouter quelque chose à la fin de chaque élément du tableau comme ceci
$array = $array | Foreach-Object {"$_ *"}
Et si je veux ajouter quelque chose de DIFFÉRENT à chaque membre, je peux le faire comme ceci
$array = @('A', 'B', 'C', 'D', 'E')
Mais cette utilisation d'un tableau temporaire semble ... maladroite. J'ai l'impression qu'il me manque quelque chose qui permettrait de changer conditionnellement les valeurs du tableau d'origine à la place. Ne pas ajouter de nouveaux éléments, simplement modifier la valeur des éléments existants.
3 Réponses :
Quelque chose comme celui-ci semble être ce que vous recherchez:
$array = @('A','B', 'C', 'D', 'E')
for ($c=1; $c -le $array.count; $c++) {
Write-host "$($array[$c-1]) $c"
}
vous avez deux options ici
1: définissez le résultat de foreach sur la variable que vous itérez. cela va itérer le tableau et définir le résultat sur la même variable.
$append = 'a'
for($i=0;$i -lt $array.count;$i++){
$array[$i] = $array[$i],$append -join ' '
$append += 'a'
}
2: définir un élément du tableau comme ceci (notez que les éléments du tableau commencent par 0 et non par 1) p >
$array[2] = 'foo'
ou dans une boucle comme celle-ci. cela définira chaque variable à l'itération.
$count = 1
$array = foreach ($item in $array) {
"$item $count"
$count ++
}
Aha. Je pense que la chose qui me manquait était votre premier exemple, définissant le $ array = sur le résultat de la boucle. Je venais de faire la boucle et d'essayer de définir $ item = . Pour des conditions plus complexes où je ne crée pas déjà une variable d'index, cela semble mieux.
Vous n'avez pas besoin d'ajouter @ (), c'est déjà un tableau en tant que
$array = 'A', 'B', 'C', 'D', 'E'
$array = 1..$array.Count | ForEach{"$($array[$_-1]) $_"}
Si vous voulez simplement ajouter à la chaîne et stocker de nouveau dans le tableau, voici comment je le ferait. Je profite des paramètres -Begin, -Process et -OutVariable de Foreach-Object.
$array = 'A', 'B', 'C', 'D', 'E'
$array = 1..$array.Count | ForEach{$array[$_-1] + " $_"}
Sortie (également stockée dans $ array)
A 1 B 2 C 3 D 4 E 5
Maintenant, si vous voulez réellement ajouter un espace avant le numéro, ajoutez-le simplement à l'élément comme ceci
$array | ForEach{$count = 1}{"$_ " + $count++} -OutVariable array
Sortie
A1 B2 C3 D4 E5
Si vous avez besoin de contrôler le flux de données plus explicitement, je pencherais toujours pour ne pas utiliser de boucles for. C'est équivalent.
$array | ForEach{$count = 1}{$_ + $count++} -OutVariable array
ou vous pouvez aussi l'écrire comme
$array = 'A', 'B', 'C', 'D', 'E'
Bien, je ne connaissais pas le truc -outVariable. Je peux voir que cela est utile. Pour mes besoins immédiats, je pense que la première solution de Guenther ci-dessous va me permettre de gérer les conditions complexes dont mon vrai code a besoin. Mais tous les trois auront leur place dans d'autres situations.
Vous souhaitez modifier ou ajouter? Avec quoi espérez-vous finir?
@ doug-maurer, je veux ajouter à la fin de la valeur actuelle. Donc le tableau final est A 1, B 2, C 3, D 4, E 5
J'ai ajouté un exemple pour à la fois ajouter la valeur et ajouter un espace et une valeur.