在Powershell中将哈希表与相同的键组合但具有不同的值

时间:2012-12-07 21:45:06

标签: powershell key

好的,我有一些哈希表需要使用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"}

基本上,需要比较键和值。如果值不同,则需要将它们加在一起。谢谢!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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])"))
    }

答案 2 :(得分: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)