如何解决有条件地修改数组元素,而不求助于临时数组
给出这样的数组
$array = @('A','B','C','D','E')
我可以像这样在数组的每个项目的末尾附加一些内容
$array = $array | Foreach-Object {"$_ *"}
如果我想向每个成员添加不同的内容,我可以这样做
$tempArray = @()
$count = 1
foreach ($item in $array) {
$tempArray += "$item $count"
$count ++
}
$array = $tempArray
但是使用临时数组似乎...笨拙。我感觉好像丢失了一些可以有条件地更改原始数组的值的东西。不添加新项目,仅更改现有项目的价值。
解决方法
您在这里有两个选择
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'
}
,
您不需要添加@(),它已经是一个数组
$array = 'A','B','C','D','E'
如果您只是想追加到字符串并存储回数组中,这就是我要做的。我利用了Foreach-Object的-Begin,-Process和-OutVariable参数。
$array | ForEach{$count = 1}{$_ + $count++} -OutVariable array
输出(也存储在$ array中)
A1
B2
C3
D4
E5
现在,如果您确实想在数字前添加一个空格,那么只需将其添加到这样的项目中
$array | ForEach{$count = 1}{"$_ " + $count++} -OutVariable array
输出
A 1
B 2
C 3
D 4
E 5
如果您需要更明确地控制数据流,我仍然倾向于不使用for循环。这是等效的。
$array = 'A','E'
$array = 1..$array.Count | ForEach{$array[$_-1] + " $_"}
或者您也可以将其写为
$array = 'A','E'
$array = 1..$array.Count | ForEach{"$($array[$_-1]) $_"}
,
类似的事情似乎就是你所追求的:
$array = @('A','E')
for ($c=1; $c -le $array.count; $c++) {
Write-host "$($array[$c-1]) $c"
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。