首页 > 解决方案 > 有条件地修改数组元素而不诉诸临时数组

问题描述

给定一个这样的数组

$array = @('A', 'B', 'C', 'D', 'E')

我可以像这样在数组中每个项目的末尾附加一些东西

$array = $array | Foreach-Object {"$_ *"}

如果我想为每个成员附加一些不同的东西,我可以这样做

$tempArray = @()
$count = 1
foreach ($item in $array) {
    $tempArray += "$item $count"
    $count ++
}
$array = $tempArray

但是使用临时数组似乎......笨拙。我觉得我错过了一些允许有条件地更改原始数组的值的东西。不添加新项目,只是更改现有项目的价值。

标签: arrayspowershell

解决方案


你有两个选择

1:将 foreach 的结果设置为您正在迭代的变量。这将迭代数组并将结果设置为相同的变量。

$count = 1
$array = foreach ($item in $array) {
    "$item $count"
    $count ++
}

2:像这样设置一个数组元素(注意数组元素以0而不是1开头)

$array[2] = 'foo'

或像这样循环。这将在迭代时设置每个变量。

$append = 'a'
for($i=0;$i -lt $array.count;$i++){
    $array[$i] = $array[$i],$append -join ' '
    $append += 'a'
}

推荐阅读