将Hashtable转换为一串键值对

Jas*_*ner 9 powershell

我有一个带计数的文件扩展名哈希表

像这样:

$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"
Run Code Online (Sandbox Code Playgroud)

最后一行应返回$ true

这可行,但寻找更优雅的方式(删除尾随;是可选的)

我想我真正想要的是哈希表或类似的东西

思考???

Jas*_*irk 27

PowerShell不会自动枚举哈希表,因此您将被迫调用GetEnumerator()或使用该Keys属性.之后,有几个选择.首先,使用$OFSOuptut Field Seperator.将数组转换为字符串时使用此字符串.默认情况下,这是""您可以更改它:

$FileExtensions = @{".foo"=4;".bar"=5}
$OFS =';'
[string]($FileExtensions.GetEnumerator() | % { "$($_.Key)=$($_.Value)" })
Run Code Online (Sandbox Code Playgroud)

接下来使用-join运算符:

$FileExtensions = @{".foo"=4;".bar"=5}
($FileExtensions.GetEnumerator() | % { "$($_.Key)=$($_.Value)" }) -join ';'
Run Code Online (Sandbox Code Playgroud)