2014-09-24 117 views
6

我有一個文件擴展名與數轉換一個哈希表,以鍵值對的字符串

像這樣一個哈希表:

$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" 

最後一行應該返回$真

這工作,但尋找一個更優雅的方式(刪除尾隨;是可選的)

我想我真正想要的是一個加入哈希表或類似的東西

想法?

回答

18

的PowerShell不會自動枚舉哈希表,所以你不得不打電話GetEnumerator()Keys財產。之後,有幾個選項。首先,使用$OFS Ouptut Field Seperator。當數組轉換爲字符串時使用此字符串。默認情況下,這是"",但你可以改變它:使用-join操作

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

下一頁:

$FileExtensions = @{".foo"=4;".bar"=5} 
($FileExtensions.GetEnumerator() | % { "$($_.Key)=$($_.Value)" }) -join ';' 
+0

這正是我一直在尋找的感謝 – JasonHorner 2014-10-02 18:44:30

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 
    } 
相關問題