PowerShell中嵌套的ForEach()

Jen*_*nte 13 powershell foreach break

我在Powershell中遇到了嵌套ForEach循环的麻烦.首先,我需要遍历列表1.对于列表1中的每个对象,我需要遍历列表2.当我在列表2中找到类似对象时,我想转到列表1中的下一个对象.

我试过休息,我试过继续,但它对我不起作用.

Function checkLists() {
  ForEach ($objectA in $listA) {
    ForEach ($objectB in $listB) {
       if ($objectA -eq $objectB) {
           // Do something 
           // goto next object in list A and find the next equal object
       }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

a)在PowerShell中中断/继续完成的内容是什么?

b)我应该如何夸大我的'问题'?

von*_*ryz 11

使用如下所述的标签get-help about_break:

A Break statement can include a label. If you use the Break keyword with
a label, Windows PowerShell exits the labeled loop instead of exiting the
current loop
Run Code Online (Sandbox Code Playgroud)

像这样,

foreach ($objectA in @("a", "e", "i")) {
    "objectA: $objectA"
    :outer
    foreach ($objectB in @("a", "b", "c", "d", "e")) {
       if ($objectB -eq $objectA) {
           "hit! $objectB"
           break :outer
       } else { "miss! $objectB" }
    }
}

#Output:
objectA: a
hit! a
objectA: e
miss! a
miss! b
miss! c
miss! d
hit! e
objectA: i
miss! a
miss! b
miss! c
miss! d
miss! e
Run Code Online (Sandbox Code Playgroud)

  • 中断后的标签(并继续)也必须在没有前导冒号":"的情况下写入,否则它将无效. (4认同)
  • 这里有一些错误.这里使用的`break:outer`似乎与没有任何标签的`break`完全没什么不同.实际上文档帮助about_Break说要将标签放在你想要退出的循环之前,如下所示:`:outer foreach(...`.但你知道吗?甚至这似乎对代码执行没有任何作用我正在谈论PowerShell v4.这个功能是破了还是什么? (2认同)

mjo*_*nor 5

这是使用中断/继续的示例。反转内部循环中的测试,并使用 Continue 保持循环运行,直到测试失败。一旦命中,它就会中断内循环,并返回到外循环中的下一个对象。

foreach ($objectA in @("a", "e", "i"))
   {
    "objectA: $objectA"
    foreach ($objectB in @("a", "b", "c", "d", "e")) {
       if ($objectB -ne $objectA)
         {
           "miss! $objectB"
           continue
         }
     else {
           "hit!  $objectB" 
           break
          }
   }
}

objectA: a
hit!  a
objectA: e
miss! a
miss! b
miss! c
miss! d
hit!  e
objectA: i
miss! a
miss! b
miss! c
miss! d
miss! e
Run Code Online (Sandbox Code Playgroud)