我有两个长度相同的列表。我需要进行迭代,以便列表 A 中的第一项与列表 B 中的第一项匹配。为此,我创建了一个嵌套的 foreach 循环,如下所示:
$nodes_table = "a","b","c"
$nodes_list = "a","b","c"
:Outer foreach ($item in $nodes_table) {
foreach($node in $nodes_list)
{
if($node -eq $item)
{
Write-Output "$node hostname matches in vTM"
break :Outer
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题: 在第一次迭代中,它匹配。但在第二次迭代中,内部循环不会转到第二项,而是再次重置。
First iteration: $node = a equals $item = a
Second iteration: $node = a not equals to $item = b.
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,在第二次迭代中,内循环没有迭代,它重置回a。
这里有两个问题。首先,如果您有一个像:Outer foreach(...标签名称一样的标签,Outer那么当您在语句中引用它时break,您指定break Outer不是break :Outer(可能只是一个拼写错误)。其次,你需要使用continue声明而不是break声明。该continue语句在下一次迭代时恢复执行。更新后的代码如下所示:
$nodes_table = "a","b","c"
$nodes_list = "a","b","c"
:Outer foreach ($item in $nodes_table) {
foreach($node in $nodes_list)
{
if($node -eq $item)
{
Write-Output "$node hostname matches in vTM"
continue Outer
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9297 次 |
| 最近记录: |