2012-12-07 92 views
3

好吧,我有一些我需要使用PowerShell進行組合的哈希表。下面是格式的示例:在Powershell中使用相同鍵但使用不同值的哈希表

$table1 = @{"A" = "1,2"; 
      "B" = "3,4"; 
      "C" = "5,6"} 

$table2 = @{"A" = "3"; 
      "B" = "5"; 
      "C" = "7"} 

我需要的表,以創建下表結合:

$newTable = @{"A" = "1,2,3"; 
       "B" = "3,4,5"; 
       "C" = "5,6,7"} 

基本上,鍵和值需要進行比較。如果值不同,則需要將它們加在一起。謝謝!

回答

0

您可以使用GetEnumerator()方法遍歷下面的值。

如果你有不均勻的密鑰分佈(有些只存在於$table1和其他只存在於$table2),但它適用於你的示例場景。

$table1 = @{"A" = "1,2"; 
      "B" = "3,4"; 
      "C" = "5,6"} 

$table2 = @{"A" = "3"; 
      "B" = "5"; 
      "C" = "7"} 


$NewTable = @{} 

$table1.GetEnumerator() | 
% { 
    $NewTable.Add($_.Key, ("$($_.Value),$($table2[$_.Key])")) 
    } 
1

這裏有一個稍微不同的方法:

$table1 = @{"A" = "1,2"; 
      "B" = "3,4"; 
      "C" = "5,6"} 

$table2 = @{"A" = "3"; 
      "B" = "5"; 
      "C" = "7"} 

$ht = $table1.Clone() 
$table2.GetEnumerator() | % {$ht[$_.Key] += ",$($_.Value)"} 
$ht 

Name       Value 
----       ----- 
C        5,6,7 
A        1,2,3 
B        3,4,5 
+0

現在我的問題是:什麼是比較有效? –

+0

這兩種方法在功能上並不完全相同。我建議的方法從$ table2中抽取所有內容 - 不僅僅是與$ table1匹配鍵的KV對。 –

+0

好!謝謝你的精確。 –

0

如何:

$table1 = @{"A" = "1,2"; 
      "B" = "3,4"; 
      "C" = "5,6"} 

$table2 = @{"A" = "2"; 
      "B" = "5"; 
      "C" = "7"} 

    $newTable = @{} 

    function AddToTable($table) 
    { 
     $table.GetEnumerator() | 
     % { 
      if(!$newTable.ContainsKey($_.Key)) {$newTable.Add($_.Key, $_.Value)} 
      else {$newTable[$_.Key] += ",$($_.Value)"} 
      $newTable[$_.Key] = @($newTable[$_.Key].Split(",") | Get-Unique | Sort-Object) -Join "," 
     } 
    } 

    AddToTable($table1) 
    AddToTable($table2) 
相關問題