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řidávají jednotlivé položky a odebírají je z kolekce. Parametr Replace nahradí celou kolekci.
Pokud v příkazu nezadáte vlastnost, Update-List
vrátí hodnotu hashtable, která popisuje aktualizaci místo aktualizace objektu. 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 rutiny Set
, 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 List objekt kolekce. Metoda NewDeck() používá Update-List
k 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 Karty třídy, které představují balíček karet a karty uchovávané dvěma hráči. Pomocí rutiny Update-List
přidáme karty do rukou hráčů a odebereme karty 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
bylo použito 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♦
a 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 objektu 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, který se má aktualizovat na Update-List
, 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, Update-List
vrátí objekt, 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
Objekt, který se má aktualizovat na tuto rutinu, můžete převést.
Výstupy
Ve výchozím nastavení tato rutina vrátí hashovatelnou tabulku, která popisuje aktualizaci.
Když zadáte parametr Vlastnost, vrátí tato rutina aktualizovaný objekt.