Condividi tramite


Update-List

Aggiunge e rimuove elementi da un valore di proprietà che contiene una raccolta di oggetti.

Sintassi

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

Descrizione

Il Update-List cmdlet aggiunge, rimuove o sostituisce gli elementi in un valore della proprietà di un oggetto e restituisce l'oggetto aggiornato. Questo cmdlet è progettato per le proprietà che contengono raccolte di oggetti.

I parametri Aggiungi e Rimuovi aggiungono singoli elementi e li rimuovono dalla raccolta. Il parametro Replace sostituisce l'intera raccolta.

Se non si specifica una proprietà nel comando, Update-List restituisce una tabella hash che descrive l'aggiornamento anziché aggiornare l'oggetto. In un secondo momento, è possibile usare questo set di modifiche per aggiornare un oggetto elenco.

Questo cmdlet funziona solo quando la proprietà che viene aggiornata supporta l'interfaccia IList utilizzata Update-List . Inoltre, tutti Set i cmdlet che accettano un aggiornamento devono supportare l'interfaccia IList .

Questo cmdlet è stato reintrodotto in PowerShell 7.

Esempio

Esempio 1: Aggiungere elementi a un valore della proprietà

In questo esempio viene creata una classe che rappresenta un mazzo di carte in cui le schede vengono archiviate come oggetto insieme List . Il metodo NewDeck() usa Update-Listper aggiungere un mazzo completo di valori di carta alla raccolta di carte .

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() }
}

Nota

Il Update-List cmdlet restituisce l'oggetto aggiornato alla pipeline. L'output viene inviato tramite pipe per Out-Null eliminare lo schermo indesiderato.

Esempio 2: Aggiungere e rimuovere elementi di una proprietà della raccolta

Continuando con il codice nell'esempio 1, creeremo istanze della classe Cards per rappresentare un mazzo di carte e le carte detenute da due giocatori. Usiamo il Update-List cmdlet per aggiungere carte alle mani dei giocatori e per rimuovere le carte dal mazzo.

$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♥

L'output mostra lo stato del mazzo prima che le carte siano state distribuite ai giocatori. Si può vedere che ogni giocatore ha ricevuto cinque carte dal mazzo. L'output finale mostra lo stato del mazzo dopo aver gestito le carte ai giocatori. Update-List è stato usato per selezionare le carte dal mazzo e aggiungerle alla raccolta dei giocatori. Poi le carte dei giocatori sono state rimosse dal mazzo usando Update-List.

Esempio 3: Aggiungere e rimuovere elementi in un singolo comando

Update-List consente di usare i parametri Aggiungi e Rimuovi in un singolo comando. In questo esempio, Player 1 vuole eliminare 4♦ e 6♦ ottenere due nuove carte.

# 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♥

Esempio 4: Applicare un set di modifiche a un oggetto elenco

Se non si specifica una proprietà, Update-List restituisce una tabella hash che descrive l'aggiornamento anziché aggiornare l'oggetto. È possibile eseguire il cast della tabella hash in un oggetto System.PSListModifier e utilizzare il ApplyTo() metodo per applicare il set di modifiche a un elenco.

$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

Parametri

-Add

Specifica i valori delle proprietà da aggiungere alla raccolta. Immettere i valori nell'ordine in cui devono essere visualizzati nella raccolta.

Type:Object[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Specifica gli oggetti da aggiornare. È anche possibile inviare tramite pipe l'oggetto da aggiornare a Update-List.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Property

Specifica la proprietà che contiene l'insieme da aggiornare. Se si omette questo parametro, Update-List restituisce un oggetto che rappresenta la modifica anziché modificare l'oggetto.

Type:String
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Remove

Specifica i valori delle proprietà da rimuovere dalla raccolta.

Type:Object[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Replace

Specifica una nuova raccolta. Questo parametro sostituisce tutti gli elementi nella raccolta originale con gli elementi specificati da tale parametro.

Type:Object[]
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Input

PSObject

È possibile inviare tramite pipe l'oggetto da aggiornare a questo cmdlet.

Output

Hashtable

Per impostazione predefinita, questo cmdlet restituisce una tabella hash che descrive l'aggiornamento.

Object

Quando si specifica il parametro Property , questo cmdlet restituisce l'oggetto aggiornato.