【问题标题】:Can I use two sets of variables in one foreach loop?我可以在一个 foreach 循环中使用两组变量吗?
【发布时间】:2016-06-11 11:00:17
【问题描述】:

是否可以构造一个单独的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”。

这可能吗?

【问题讨论】:

    标签: foreach powershell-4.0


    【解决方案1】:

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

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

    但是,如果您的两个数组的元素无论如何都是相关的,则最好使用 hashtable 代替:

    $Sites = @{
      'Google'     = 'https://www.google.com'
      'DuckDuckGo' = 'https://duckduckgo.com'
    }
    
    foreach ($name in $Sites.Keys) {
      "{0}`t{1}" -f $name, $Sites[$name]
    }
    

    【讨论】:

    • 我使用了哈希表,效果很好!当在我实际较长的脚本中使用时,在运行它时,它会将网站地址打印到屏幕上,所以我只是在 foreach 循环开始之前将屏幕文本更改为黑色,并在它开始后恢复为白色并且隐藏了 url。真棒答案。非常感谢@ansgarwiechers !!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 2015-06-17
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多