我可以在一个foreach循环中使用两组变量吗?

时间:2016-02-28 11:41:31

标签: foreach powershell-v4.0

是否可以构造一个循环使用两个独立变量的单个foreach循环?

下面是我正在尝试做的简化示例 - 除了这个示例列出了两个单独的循环,而我想在一个循环中设置它们。

$Sites = @("https://www.google.com" , "https://duckduckgo.com")
$Site_names = @( "Google" , "DuckDuckGO")

foreach  ($element in $Sites) {
  Write-Host "`n`n"
  $element
  Write-Host "`n`n"
}

foreach ($name in $Site_names) {
  Write-Host "`n`n"
  $name
  Write-Host "`n`n"
}

还有其他代码需要使用,因此循环需要能够在代码块中允许多行代码 - 所以单行解决方案(如果有的话)不是我所追求的。我也不认为使用管道是可行的(但我当然可能错了)。

两组变量:$Sites$Site_names

我想要运行一个foreach循环并列出站点地址和站点名称,每次循环运行时这两个值都会更改。

  • 首次运行:引用网址“https://www.google.com”,网站名称为“Google”。
  • 第二次运行:引用URL“https://duckduckgo.com”和站点名称“DuckDuckGo”。

这可能吗?

1 个答案:

答案 0 :(得分:1)

如果你有两个相同大小的数组,你可以简单地使用这样的for循环:

for ($i=0; $i -lt $Sites.Count; $i++) {
  "{0}`t{1}" -f $Site_names[$i], $Sites[$i]
}

但是,如果两个数组的元素无关,那么最好使用{{3}}代替:

$Sites = @{
  'Google'     = 'https://www.google.com'
  'DuckDuckGo' = 'https://duckduckgo.com'
}

foreach ($name in $Sites.Keys) {
  "{0}`t{1}" -f $name, $Sites[$name]
}