3

さて、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"}

基本的に、キーと値を比較する必要があります。値が異なる場合は、それらを合計する必要がありました。ありがとう!

4

3 に答える 3

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
于 2012-12-07T22:02:25.153 に答える
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])"))
    }
于 2012-12-07T21:51:49.187 に答える
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)
于 2012-12-12T13:27:05.473 に答える