Delen via


Update-List

Hiermee voegt u items toe aan en verwijdert u items uit een eigenschapswaarde die een verzameling objecten bevat.

Syntaxis

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

Description

De Update-List cmdlet voegt items toe, verwijdert of vervangt items in een eigenschapswaarde van een object en retourneert het bijgewerkte object. Deze cmdlet is ontworpen voor eigenschappen die verzamelingen objecten bevatten.

Met de parameters Toevoegen en Verwijderen worden afzonderlijke items aan de verzameling toegevoegd en verwijderd. De parameter Replace vervangt de hele verzameling.

Als u geen eigenschap in de opdracht opgeeft, Update-List retourneert u een hashtabel die de update beschrijft in plaats van het object bij te werken. Later kunt u deze wijzigingsset gebruiken om een lijstobject bij te werken.

Deze cmdlet werkt alleen wanneer de eigenschap die wordt bijgewerkt, de IList-interface ondersteunt die Update-List wordt gebruikt. Set Alle cmdlets die een update accepteren, moeten ook ondersteuning bieden voor de IList-interface.

Deze cmdlet is opnieuw geïntroduceerd in PowerShell 7.

Voorbeelden

Voorbeeld 1: Items toevoegen aan een eigenschapswaarde

In dit voorbeeld maken we een klasse die een stapel kaarten vertegenwoordigt waarin de kaarten worden opgeslagen als een lijstverzamelingsobject . De methode NewDeck() gebruikt Update-Listom een volledige reeks kaartwaarden toe te voegen aan de kaartenverzameling .

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

Notitie

De Update-List cmdlet voert het bijgewerkte object uit naar de pijplijn. We geven de uitvoer door om het ongewenste beeldscherm te Out-Null onderdrukken.

Voorbeeld 2: Items van een verzamelingseigenschap toevoegen en verwijderen

Als u doorgaat met de code in voorbeeld 1, maken we exemplaren van de klasse Kaarten om een stapel kaarten en de kaarten van twee spelers weer te geven. We gebruiken de Update-List cmdlet om kaarten toe te voegen aan de handen van de spelers en om kaarten uit de deck te verwijderen.

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

In de uitvoer ziet u de status van het deck voordat de kaarten aan de spelers werden uitgedeeld. U kunt zien dat elke speler vijf kaarten van het deck heeft ontvangen. De uiteindelijke uitvoer toont de status van het deck nadat de kaarten aan de spelers zijn geslagen. Update-List werd gebruikt om de kaarten in de deck te selecteren en deze toe te voegen aan de collectie van de spelers. Toen werden de kaarten van de spelers uit het deck verwijderd met behulp van Update-List.

Voorbeeld 3: Items toevoegen en verwijderen in één opdracht

Update-List hiermee kunt u de parameters Toevoegen en Verwijderen in één opdracht gebruiken. In dit voorbeeld wil Player 1 de 4♦ kaart verwijderen en 6♦ twee nieuwe kaarten krijgen.

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

Voorbeeld 4: Een wijzigingsset toepassen op een lijstobject

Als u geen eigenschap opgeeft, Update-List retourneert u een hashtabel die de update beschrijft in plaats van het object bij te werken. U kunt de hashtable casten naar een System.PSListModifier-object en de ApplyTo() methode gebruiken om de wijzigingsset toe te passen op een lijst.

$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

Parameters

-Add

Hiermee geeft u de eigenschapswaarden op die moeten worden toegevoegd aan de verzameling. Voer de waarden in de volgorde in waarin ze moeten worden weergegeven in de verzameling.

Type:Object[]
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-InputObject

Hiermee geeft u de objecten die moeten worden bijgewerkt. U kunt het object ook doorsluisen waarnaar Update-Listmoet worden bijgewerkt.

Type:PSObject
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-Property

Hiermee geeft u de eigenschap op die de verzameling bevat die wordt bijgewerkt. Als u deze parameter weglaat, Update-List wordt een object geretourneerd dat de wijziging aangeeft in plaats van het object te wijzigen.

Type:String
Position:0
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Remove

Hiermee geeft u de eigenschapswaarden die uit de verzameling moeten worden verwijderd.

Type:Object[]
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Replace

Hiermee geeft u een nieuwe verzameling op. Deze parameter vervangt alle items in de oorspronkelijke verzameling door de items die door deze parameter zijn opgegeven.

Type:Object[]
Position:Named
Default value:None
Vereist:True
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

Invoerwaarden

PSObject

U kunt het object doorsluisen dat moet worden bijgewerkt naar deze cmdlet.

Uitvoerwaarden

Hashtable

Deze cmdlet retourneert standaard een hashtabel die de update beschrijft.

Object

Wanneer u de parameter Eigenschap opgeeft, retourneert deze cmdlet het bijgewerkte object.