我有一个具有以下结构的powershell嵌套数组。
$jHosts = @(@("Host-1","Host-3"),@("Host-2","Host-4"),@("Host-5"))此外,这里还有我的powershell脚本来迭代嵌套数组。
for($i=0; $i -le $jHosts.Length; $i++){
Write-Host $jHosts[$i]
for($k=0;$k -le $jHosts.Length; $k++){
Write-Output $jHosts[$i][$k]
}
}Write-output显示的输出如下,
HOST-1
HOST-3
HOST-2
HOST-4
H
O
S
T正如我的for循环读取前两个嵌套数组中的所有值一样,但是当第三个数组的字符串是一个对象时,它会读取每个字符。我在这里做错什么了?
发布于 2020-12-15 07:17:19
我无法重现您的结果,但您的代码无论如何都包含两个逻辑错误:
-le运算符来忽略实际的数组边界。使用-lt代替.$jHosts.Length替换为$jHosts[$i].Length .这就是您的代码如何产生有效结果的方式:
$jHosts = @(@("Host-1","Host-3"),@("Host-2","Host-4"),@("Host-5"))
for($i=0; $i -lt $jHosts.Length; $i++){
Write-Host $jHosts[$i]
for($k=0;$k -lt $jHosts[$i].Length; $k++){
Write-Output $jHosts[$i][$k]
}
}输出:
Host-1 Host-3
Host-1
Host-3
Host-2 Host-4
Host-2
Host-4
Host-5
Host-5发布于 2020-12-15 12:07:58
若要迭代数组,请使用Count属性,而不是Length。在您的示例中,由于数组中的最后一个元素只有一个项,所以PowerShell将对其进行解压,使其充当单个字符串"Host-5“。
如果您执行"Host-5".Length,答案是6 (字符串中有6个字符)。
如果您执行"Host-5".Count,则答案是1 (只有一个字符串)
而且,通过执行-le来迭代一个级别太深了,这应该是-lt,因为您在0开始迭代。
$jHosts = @(@("Host-1","Host-3"),@("Host-2","Host-4"),@("Host-5"))
for($i=0; $i -lt $jHosts.Count; $i++){
for($k=0;$k -lt $jHosts[$i].Count; $k++){
Write-Output $jHosts[$i][$k]
}
}返回
Host-1
Host-3
Host-2
Host-4
Host-5如果我像在代码中那样添加额外的行Write-Host $jHosts[$i],然后执行
$jHosts = @(@("Host-1","Host-3"),@("Host-2","Host-4"),@("Host-5"))
for($i=0; $i -lt $jHosts.Count; $i++){
Write-Host $jHosts[$i]
for($k=0;$k -lt $jHosts[$i].Count; $k++){
Write-Output $jHosts[$i][$k]
}
}结果是
Host-1 Host-3
Host-1
Host-3
Host-2 Host-4
Host-2
Host-4
Host-5
Host-5https://stackoverflow.com/questions/65300827
复制相似问题