【发布时间】:2016-06-13 02:48:37
【问题描述】:
示例 01 - 下面是我在更复杂的脚本中使用的代码的简化示例。此代码有效。
问题是我希望能够控制通过 foreach 循环处理两组值(网站名称和 URL)的顺序。
我了解哈希表不会按照它们列出的顺序处理数据,而是以看似随机的方式将其列出。
我尝试了什么: 我通过一本书、谷歌和堆栈交换对此进行了一些研究。
我已尝试使用 GetEnumerator 命令及其关联的“排序名称”选项,如下面的示例 02 所示。此示例适用于这种情况 - 它成功地根据站点名称的字母顺序列出了站点。但是我不想按字母顺序列出,而是按照规定的顺序列出。如果订购需要手动完成,那将是 很好,但我不知道如何实现这一点。此外,当我尝试将此方法与我的实际脚本一起使用时,脚本将运行,但在本节中它将显示“System.Collections.DictionaryEntry”,而不是正确运行脚本。也许我在这里运行不正确。
我还尝试了什么: 我还尝试了一个使用两个值的哈希表——站点名称和一个字母。这成功地按照我使用字母表规定的顺序列出了网站,但我的实际脚本需要有两个值 - 网站名称和 URL - 用于管理 运行脚本。
我还尝试在哈希表中使用三个值 - 以为我可能已经看到一个说明这是可能的 - 但是如果这甚至可能,我找不到使这项工作的语法。
最后的想法: 我想知道您是否可以使用两个哈希表来解决这个问题 - 一个设置 foreach 循环处理值的顺序(根据下面的示例 03),另一个提供要在 foreach 循环中使用的实际值(根据示例 01)。
这是一个可能的解决方案或替代方案吗? 有没有其他方法可以以合理的方式实现这一目标?
提前致谢。
示例 01
$Sites = @{
'DuckDuckGo' = 'https://duckduckgo.com'
'Google' = 'https://www.google.com'
'Ixquick' = 'https://www.ixquick.com'
'Yahoo ' = 'https://search.yahoo.com'
'Dogpile' = 'http://www.dogpile.com'
'Yippee ' = 'http://www.yippy.com'
}
clear
write-host "`n`n`n"
foreach ($name in $Sites.Keys) {
write-host
"`t`t {0} `t`t`t {1}" -f $name , $Sites[$name]
write-host
}
示例 02
$Sites = @{
'DuckDuckGo' = 'https://duckduckgo.com'
'Google' = 'https://www.google.com'
'Ixquick' = 'https://www.ixquick.com'
'Yahoo ' = 'https://search.yahoo.com'
'Dogpile' = 'http://www.dogpile.com'
'Yippee ' = 'http://www.yippy.com'
}
clear
write-host "`n`n`n"
foreach($name in $Sites.GetEnumerator() | Sort Name)
{
$name
}
write-host "`n`n`n`n"
示例 03
$Sites = @{
'DuckDuckGo' = 'a'
'Google' = 'f'
'Ixquick' = 'c'
'Yahoo ' = 'z'
'Dogpile' = 'e'
'Yippee ' = 'b'
}
$Sites.GetEnumerator() | Sort Value
【问题讨论】:
标签: foreach hashtable powershell-4.0