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-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 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-List
který 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
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 Property , vrátí tato rutina aktualizovaný objekt.