0

これは、私が克服しようとしてきたいくつかの奇妙さの例です。最終結果は、2 つの元のハッシュ テーブルを変更せずに、結合されたハッシュ テーブルを持つ新しい変数を持ちたいということです。

例: 2 つのハッシュ テーブルがあります。

    $User = @{
        "Name" = "Jane Doe"
        "Location" = "Work"
        }
    $Details = @{
        "hair" = "Brown"
        "Eyes" = "Blue"
        "Height" = "68"
        }

そして、一方を他方に追加し、結果を新しい変数にコピーしたいと思います。いくつかの例:

    $newHash = $User.add("Details",$Details)

    ($newHash = $User).add("Details",$Details)

    $newHash = $User
    $newHash.add("Details",$Details)

最後の 2 つは詳細を追加する作業ですが、$newHash と $User の両方に追加します! 3 番目の例を実行してから詳細を削除すると、次のようになります。

   $User.Remove("Details")

$User と $newHash の両方から削除します! この動作を回避する方法がわかりません。提案をいただければ幸いです。

4

3 に答える 3

4

これを試して:

$User = @{
          "Name" = "Jane Doe"
          "Location" = "Work"
    }
$Details = @{
             "hair" = "Brown"
             "Eyes" = "Blue"
             "Height" = "68"
            }

$newHash = $User.clone()
$newHash.Add('Details',$details)
于 2013-11-01T17:17:29.460 に答える
1

.Clone() は正しいパスの 1 つですが、キーの大文字と小文字の区別に関しては、複製されたハッシュテーブルが実際には通常のハッシュテーブルとまったく同じことをしないという点で、やや危険です。複製されたハッシュテーブルはデータをコピーしますが、デフォルトでキーの大文字と小文字を区別しないために PowerShell ハッシュテーブルが使用する少量の情報はコピーしません。

幸いなことに、PowerShell で 2 つのハッシュテーブルを一緒に追加することができます。これにより、非常に簡単な回避策が得られます。

$NewHash = @{} + $User
于 2013-11-02T20:53:43.270 に答える