次の方法で共有


Update-List

オブジェクトのコレクションを格納するプロパティ値の項目を追加または削除します。

構文

Update-List
      [-Add <Object[]>]
      [-Remove <Object[]>]
      [-InputObject <PSObject>]
      [[-Property] <String>]
      [<CommonParameters>]
Update-List
      -Replace <Object[]>
      [-InputObject <PSObject>]
      [[-Property] <String>]
      [<CommonParameters>]

説明

Update-List コマンドレットは、オブジェクトのプロパティ値内の項目を追加、削除、または置換し、更新されたオブジェクトを返します。 このコマンドレットは、オブジェクトのコレクションを格納するプロパティ用に設計されています。

Add パラメーターと Remove パラメーターは、個々の項目をコレクションに追加してコレクションから削除します。 Replace パラメーターは、コレクション全体を置き換えます。

コマンドでプロパティを指定しない場合、 Update-List は、オブジェクトを更新するのではなく、更新を記述するハッシュテーブルを返します。 後で、この変更セットを使用してリスト オブジェクトを更新できます。

このコマンドレットは、更新中のプロパティが、Update-List使用する IList インターフェイスをサポートしている場合にのみ機能します。 また、更新プログラムを受け入れる Set コマンドレットは、 IList インターフェイスをサポートする必要があります。

このコマンドレットは、PowerShell 7 で再導入されました。

例 1: プロパティ値に項目を追加する

この例では、カードが List コレクション オブジェクトとして格納されているカードのデッキを表すクラスを作成します。 NewDeck() メソッドは、Update-Listを使用して、カード値の完全なデッキをcards コレクションに追加します。

class Cards {

    [System.Collections.Generic.List[string]]$cards
    [string]$name

    Cards([string]$_name) {
        $this.name = $_name
        $this.cards = [System.Collections.Generic.List[string]]::new()
    }

    NewDeck() {
        $_suits = "`u{2663}","`u{2666}","`u{2665}","`u{2660}"
        $_values = 'A',2,3,4,5,6,7,8,9,10,'J','Q','K'
        $_deck = foreach ($s in $_suits){ foreach ($v in $_values){ "$v$s"} }
        $this | Update-List -Property cards -Add $_deck | Out-Null
    }

    Show() {
        Write-Host
        Write-Host $this.name ": " $this.cards[0..12]
        if ($this.cards.count -gt 13) {
            Write-Host (' ' * ($this.name.length+3)) $this.cards[13..25]
        }
        if ($this.cards.count -gt 26) {
            Write-Host (' ' * ($this.name.length+3)) $this.cards[26..38]
        }
        if ($this.cards.count -gt 39) {
            Write-Host (' ' * ($this.name.length+3)) $this.cards[39..51]
        }
    }

    Shuffle() { $this.cards = Get-Random -InputObject $this.cards -Count 52 }

    Sort() { $this.cards.Sort() }
}

Note

Update-List コマンドレットは、更新されたオブジェクトをパイプラインに出力します。 出力をパイプ処理して Out-Null し、不要な表示を抑制します。

例 2: コレクション プロパティの項目を追加および削除する

例 1 のコードを続けて、カードのデッキと 2 人のプレイヤーが保持するカードを表す Cards クラスのインスタンスを作成します。 Update-Listコマンドレットを使用して、プレイヤーの手にカードを追加し、デッキからカードを削除します。

$player1 = [Cards]::new('Player 1')
$player2 = [Cards]::new('Player 2')

$deck = [Cards]::new('Deck')
$deck.NewDeck()
$deck.Shuffle()
$deck.Show()

# Deal two hands
$player1 | Update-List -Property cards -Add $deck.cards[0,2,4,6,8] | Out-Null
$player2 | Update-List -Property cards -Add $deck.cards[1,3,5,7,9] | Out-Null
$deck | Update-List -Property cards -Remove $player1.cards | Out-Null
$deck | Update-List -Property cards -Remove $player2.cards | Out-Null

$player1.Show()
$player2.Show()
$deck.Show()

Deck :  4♦ 7♥ J♦ 5♣ A♣ 8♦ J♣ Q♥ 6♦ 3♦ 9♦ 6♣ 2♣
        K♥ 4♠ 10♥ 8♠ 10♦ 9♠ 6♠ K♦ 7♣ 3♣ Q♣ A♥ Q♠
        3♥ 5♥ 2♦ 5♠ J♥ J♠ 10♣ 4♥ Q♦ 10♠ 4♣ 2♠ 2♥
        6♥ 7♦ A♠ 5♦ 8♣ 9♥ K♠ 7♠ 3♠ 9♣ A♦ K♣ 8♥

Player 1 :  4♦ J♦ A♣ J♣ 6♦

Player 2 :  7♥ 5♣ 8♦ Q♥ 3♦

Deck :  9♦ 6♣ 2♣ K♥ 4♠ 10♥ 8♠ 10♦ 9♠ 6♠ K♦ 7♣ 3♣
        Q♣ A♥ Q♠ 3♥ 5♥ 2♦ 5♠ J♥ J♠ 10♣ 4♥ Q♦ 10♠
        4♣ 2♠ 2♥ 6♥ 7♦ A♠ 5♦ 8♣ 9♥ K♠ 7♠ 3♠ 9♣
        A♦ K♣ 8♥

出力には、カードがプレイヤーに配られた前のデッキの状態が表示されます。 各プレイヤーがデッキから 5 枚のカードを受け取ったことがわかります。 最後の出力は、プレイヤーにカードを処理した後のデッキの状態を示しています。 Update-List は、デッキからカードを選択し、プレイヤーのコレクションに追加するために使用されました。 その後、プレイヤーのカードは Update-Listを使用してデッキから削除されました。

例 3: 1 つのコマンドで項目を追加および削除する

Update-List では、1 つのコマンドで Add パラメーターと Remove パラメーターを使用できます。 この例では、プレイヤー 1 は 4♦6♦ を破棄し、2 つの新しいカードを取得します。

# Player 1 wants two new cards - remove 2 cards & add 2 cards
$player1 | Update-List -Property cards -Remove $player1.cards[0,4] -Add $deck.cards[0..1] | Out-Null
$player1.Show()

# remove dealt cards from deck
$deck | Update-List -Property cards -Remove $deck.cards[0..1] | Out-Null
$deck.Show()

Player 1 :  J♦ A♣ J♣ 9♦ 6♣

Deck :  2♣ K♥ 4♠ 10♥ 8♠ 10♦ 9♠ 6♠ K♦ 7♣ 3♣ Q♣ A♥
        Q♠ 3♥ 5♥ 2♦ 5♠ J♥ J♠ 10♣ 4♥ Q♦ 10♠ 4♣ 2♠
        2♥ 6♥ 7♦ A♠ 5♦ 8♣ 9♥ K♠ 7♠ 3♠ 9♣ A♦ K♣
        8♥

例 4: リスト オブジェクトに変更セットを適用する

プロパティを指定しない場合、 Update-List は、オブジェクトを更新するのではなく、更新を記述するハッシュテーブルを返します。 ハッシュテーブルを System.PSListModifier オブジェクトにキャストし、 ApplyTo() メソッドを使用して変更セットをリストに適用できます。

$list = [System.Collections.ArrayList] (1, 43, 2)
$changeInstructions = Update-List -Remove 43 -Add 42
$changeInstructions

Name                           Value
----                           -----
Add                            {42}
Remove                         {43}

([PSListModifier]($changeInstructions)).ApplyTo($list)
$list

1
2
42

パラメーター

-Add

コレクションに追加するプロパティ値を指定します。 コレクションに表示する順序で値を入力します。

型:Object[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-InputObject

更新するオブジェクトを指定します。 更新するオブジェクトをパイプ処理して Update-Listすることもできます。

型:PSObject
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-Property

更新するコレクションを含むプロパティを指定します。 このパラメーターを省略すると、 Update-List はオブジェクトを変更するのではなく、変更を表すオブジェクトを返します。

型:String
配置:0
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Remove

コレクションから削除するプロパティ値を指定します。

型:Object[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Replace

新しいコレクションを指定します。 このパラメーターは、元のコレクション内のすべての項目を、このパラメーターで指定された項目で置き換えます。

型:Object[]
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

PSObject

このコマンドレットに更新するオブジェクトをパイプ処理できます。

出力

Hashtable

既定では、このコマンドレットは更新プログラムを記述するハッシュテーブルを返します。

Object

Property パラメーターを指定すると、このコマンドレットは更新されたオブジェクトを返します。