Update-List
Dodaje elementy do i usuwa elementy z wartości właściwości zawierającej kolekcję obiektów.
Składnia
Update-List
[-Add <Object[]>]
[-Remove <Object[]>]
[-InputObject <PSObject>]
[[-Property] <String>]
[<CommonParameters>]
Update-List
-Replace <Object[]>
[-InputObject <PSObject>]
[[-Property] <String>]
[<CommonParameters>]
Opis
Polecenie cmdlet Update-List
dodaje, usuwa lub zamienia elementy w wartości właściwości obiektu i zwraca zaktualizowany obiekt. To polecenie cmdlet jest przeznaczone dla właściwości zawierających kolekcje obiektów.
Parametry Add and Remove dodają poszczególne elementy i usuń je z kolekcji. Parametr Replace zastępuje całą kolekcję.
Jeśli nie określisz właściwości w poleceniu, Update-List
zwróci tabelę skrótu opisjącą aktualizację zamiast aktualizować obiekt. Później możesz użyć tego zestawu zmian, aby zaktualizować obiekt listy.
To polecenie cmdlet działa tylko wtedy, gdy aktualizowana właściwość obsługuje interfejs IList używany przez Update-List
. Ponadto wszystkie polecenia cmdlet Set
, które akceptują aktualizację, muszą obsługiwać interfejs IList.
To polecenie cmdlet zostało ponownie wprowadzone w programie PowerShell 7.
Przykłady
Przykład 1. Dodawanie elementów do wartości właściwości
W tym przykładzie utworzymy klasę reprezentującą talii kart, w których karty są przechowywane jako obiekt listy kolekcji. Metoda NewDeck() używa Update-List
do dodania pełnej talii wartości kart do kolekcji kart.
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() }
}
Nuta
Polecenie cmdlet Update-List
zwraca zaktualizowany obiekt do potoku. Przesyłamy dane wyjściowe do Out-Null
, aby pominąć niepożądany ekran.
Przykład 2. Dodawanie i usuwanie elementów właściwości kolekcji
Kontynuując kod w przykładzie 1, utworzymy wystąpienia klasy Cards reprezentujące talii kart i kart przechowywanych przez dwóch graczy. Używamy polecenia cmdlet Update-List
, aby dodać karty do rąk graczy i usunąć karty z talii.
$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♥
Dane wyjściowe pokazują stan talii, zanim karty zostały rozdane graczom. Widać, że każdy gracz otrzymał pięć kart z talii. Końcowe dane wyjściowe pokazują stan pokładu po rozdaniu kart graczom.
Update-List
został użyty do wybrania kart z talii i dodania ich do kolekcji graczy. Następnie karty graczy zostały usunięte z talii przy użyciu Update-List
.
Przykład 3. Dodawanie i usuwanie elementów w jednym poleceniu
Update-List
umożliwia użycie parametrów Add and Remove w jednym poleceniu. W tym przykładzie gracz 1 chce odrzucić 4♦
i 6♦
i uzyskać dwie nowe 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♥
Przykład 4. Stosowanie zestawu zmian do obiektu listy
Jeśli nie określisz właściwości, Update-List
zwraca tabelę skrótu opisjącą aktualizację zamiast aktualizować obiekt. Można rzutować tabelę skrótu na obiekt System.PSListModifier i użyć metody ApplyTo()
, aby zastosować zmianę ustawioną na listę.
$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
Określa wartości właściwości do dodania do kolekcji. Wprowadź wartości w kolejności, w której powinny być wyświetlane w kolekcji.
Typ: | Object[] |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-InputObject
Określa obiekty do zaktualizowania. Możesz również przekazać do potoku obiekt, który ma zostać zaktualizowany do Update-List
.
Typ: | PSObject |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-Property
Określa właściwość zawierającą aktualizowaną kolekcję. Jeśli ten parametr zostanie pominięty, Update-List
zwróci obiekt reprezentujący zmianę zamiast zmieniać obiekt.
Typ: | String |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Remove
Określa wartości właściwości do usunięcia z kolekcji.
Typ: | Object[] |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Replace
Określa nową kolekcję. Ten parametr zastępuje wszystkie elementy w oryginalnej kolekcji elementami określonymi przez ten parametr.
Typ: | Object[] |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
Dane wejściowe
Możesz przekazać obiekt do potoku, który ma zostać zaktualizowany do tego polecenia cmdlet.
Dane wyjściowe
Domyślnie to polecenie cmdlet zwraca tabelę skrótów opisjącą aktualizację.
Po określeniu parametru właściwości to polecenie cmdlet zwraca zaktualizowany obiekt.