Udostępnij za pośrednictwem


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-Listdo 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

PSObject

Możesz przekazać obiekt do potoku, który ma zostać zaktualizowany do tego polecenia cmdlet.

Dane wyjściowe

Hashtable

Domyślnie to polecenie cmdlet zwraca tabelę skrótów opisjącą aktualizację.

Object

Po określeniu parametru właściwości to polecenie cmdlet zwraca zaktualizowany obiekt.