在 ForEach-Object 循环中附加到数组

在 ForEach-Object 循环中附加到数组

当我尝试从遍历另一个数组的 ForEach-Object 循环中附加到数组时遇到了一个奇怪的问题。

我尝试尽可能简洁地重现该问题:

$InputObject1 = @{
    Property = '123456';
}

$InputObject2 = @{
    Property = '654321';
}

$InputArray = $InputObject1, $InputObject2


$OutputObject = @{
    TargetArray = '';
} 

$InputArray | ForEach-Object {
    Write-Output $_.property
    $OutputObject.TargetArray += $_.property
}

Write-Output "Testing Array Readback" 
Write-Output $OutputObject.TargetArray[0]
Write-Output $OutputObject.TargetArray[1]

我得到的输出是:

123456
654321
TESTING Array Readback
1
2

然而,我的输出要实现的是:

123456
654321
TESTING Array Readback
123456
654321

出于某种原因,尽管$_.property在循环的每次迭代中都是不同的;写入的值$输出对象.目标数组几乎看起来像是以某种奇怪的递归方式遍历第一次迭代的值。

我对 PowerShell 脚本还不太熟悉,所以如果我在某个地方犯了非常明显的错误或假设,我深表歉意。这个完全难倒了我。提前​​谢谢!


编辑:找到解决方案。

感谢@LotPings 的帮助,我找到了问题所在。我对目标数组之内$输出对象是不正确的。

我错误地写成了:

$OutputObject = @{
    TargetArray = '';
}

这意味着:

$OutputObject.TargetArray += $_.property

... 实际上是将两个值连接在一起,得到 '123456654321'。而不是向数组中添加一个值,如 {123456, 654321}。

$输出对象因此哈希表应该定义为:

$OutputObject = @{
    TargetArray = @();
}

这会产生所需的输出。

答案1

$InputArray并且$OutputObject都是哈希表,
看看它们包含什么:

> $InputArray

Name                           Value
----                           -----
Property                       123456
Property                       654321

> $OutputObject

Name                           Value
----                           -----
TargetArray                    123456654321

想想这是怎么发生的。

相关内容