我有一个带计数的文件扩展名哈希表
像这样:$FileExtensions = @{".foo"=4;".bar"=5}
Function HashConvertTo-String($ht) {
foreach($pair in $ht.GetEnumerator()) {
$output+=$pair.key + "=" + $pair.Value + ";"
}
$output
}
$hashString = HashConvertTo-String($FileExtensions)
$hashString.TrimEnd(';') -eq ".foo=4;.bar=5"
最后一行应返回$ true
这可行,但寻找更优雅的方式(删除尾随;是可选的)
我想我真正想要的是哈希表或类似的东西
思想???
答案 0 :(得分:25)
PowerShell不会自动枚举哈希表,因此您被迫调用GetEnumerator()
或Keys
属性。之后,有几个选择。首先,使用$OFS
Ouptut Field Seperator。将数组转换为字符串时使用此字符串。默认情况下,这是""
,但您可以更改它:
$FileExtensions = @{".foo"=4;".bar"=5}
$OFS =';'
[string]($FileExtensions.GetEnumerator() | % { "$($_.Key)=$($_.Value)" })
接下来使用-join运算符:
$FileExtensions = @{".foo"=4;".bar"=5}
($FileExtensions.GetEnumerator() | % { "$($_.Key)=$($_.Value)" }) -join ';'
答案 1 :(得分:0)
未经测试,但此代码应该有效:
Function HashConvertTo-String($ht) {
$first = $true
foreach($pair in $ht.GetEnumerator()) {
if ($first)
{
$first = $false
}
else
{
$output += ';'
}
$output+="{0}={1}" -f $($pair.key),$($pair.Value)
}
$output
}