2016-02-28 91 views
1

是否可以構建一個單獨的循環,使用兩個獨立的變量集循環?我可以在一個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

如果你有同樣大小的兩個數組,你可以簡單地使用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] 
} 
+0

我使用了散列表&它工作完美!當用在我的實際更長的腳本中,運行它時,它將網站地址打印到屏幕上,所以我在foreach循環開始之前將屏幕文本更改爲黑色,並在啓動後隱藏了網址。真棒回答。非常感謝@ansgarwiechers! –