Sdílet prostřednictvím


Update-List

Přidá položky do a odebere položky z hodnoty vlastnosti, která obsahuje kolekci objektů.

Syntaxe

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

Description

Rutina Update-List přidá, odebere nebo nahradí položky v hodnotě vlastnosti objektu a vrátí aktualizovaný objekt. Tato rutina je určená pro vlastnosti, které obsahují kolekce objektů.

Parametry Přidat a odebrat přidejte jednotlivé položky a odeberte je z kolekce. Parametr Replace nahrazuje celou kolekci.

Pokud v příkazu nezadáte vlastnost, Update-List vrátí hodnotu hashtable, která místo aktualizace objektu popisuje aktualizaci. Později můžete pomocí této sady změn aktualizovat objekt seznamu.

Tato rutina funguje pouze v případě, že aktualizovaná vlastnost podporuje rozhraní IList , které Update-List používá. Všechny Set rutiny, které přijímají aktualizaci, musí také podporovat rozhraní IList .

Tato rutina byla znovu vyvolána v PowerShellu 7.

Příklady

Příklad 1: Přidání položek do hodnoty vlastnosti

V tomto příkladu vytvoříme třídu, která představuje balíček karet, kde jsou karty uloženy jako objekt kolekce Seznamu . Metoda NewDeck() používá Update-Listk přidání kompletního balíčku hodnot karet do kolekce karet .

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

Poznámka:

Rutina Update-List vypíše aktualizovaný objekt do kanálu. Výstup předáme tak, aby Out-Null potlačil nežádoucí zobrazení.

Příklad 2: Přidání a odebrání položek vlastnosti kolekce

Pokračujeme v kódu v příkladu 1, vytvoříme instance třídy Karty , které představují balíček karet a karty uchovávané dvěma hráči. Tuto rutinu Update-List používáme k přidání karet do rukou hráčů a k odebrání karet z balíčku.

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

Výstup ukazuje stav balíčku před tím, než byly karty uvolněny hráčům. Vidíte, že každý hráč obdržel z balíčku pět karet. Konečný výstup ukazuje stav balíčku po zpracování karet hráčům. Update-List byla použita k výběru karet z balíčku a jejich přidání do kolekce hráčů. Pak byly karty hráčů odebrány z paluby pomocí Update-List.

Příklad 3: Přidání a odebrání položek v jednom příkazu

Update-List umožňuje použít parametry Přidat a odebrat v jednom příkazu. V tomto příkladu chce Player 1 zahodit 4♦ a 6♦ získat dvě nové karty.

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

Příklad 4: Použití sady změn u objektu seznamu

Pokud nezadáte vlastnost, Update-List vrátí hodnotu hashtable, která popisuje aktualizaci místo aktualizace objektu. Hashtable můžete přetypovat na System.PSListModifier objekt a použít metodu ApplyTo() použít změnu nastavenou na seznam.

$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

Parametry

-Add

Určuje hodnoty vlastností, které se mají přidat do kolekce. Zadejte hodnoty v pořadí, v jakém by se měly v kolekci objevit.

Typ:Object[]
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-InputObject

Určuje objekty, které se mají aktualizovat. Objekt, na Update-Listkterý se má aktualizovat, můžete také formovat .

Typ:PSObject
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-Property

Určuje vlastnost, která obsahuje kolekci, která se aktualizuje. Pokud tento parametr vynecháte, vrátí objekt, Update-List který představuje změnu namísto změny objektu.

Typ:String
Position:0
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Remove

Určuje hodnoty vlastností, které se mají z kolekce odebrat.

Typ:Object[]
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Replace

Určuje novou kolekci. Tento parametr nahradí všechny položky v původní kolekci položkami zadanými tímto parametrem.

Typ:Object[]
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

PSObject

Objekt, který se má aktualizovat na tuto rutinu, můžete převést.

Výstupy

Hashtable

Ve výchozím nastavení tato rutina vrátí hashovatelnou tabulku, která popisuje aktualizaci.

Object

Když zadáte parametr Property , vrátí tato rutina aktualizovaný objekt.