2012-12-07 58 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) 
相关问题