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 Update-List cmdlet 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 Dodaj i Usuń dodaj poszczególne elementy do kolekcji i usuń je z kolekcji. Zastąp parametr zastępuje całą kolekcję.

Jeśli nie określisz właściwości w poleceniu, zwraca tabelę skrótu opisjącą Update-List aktualizację zamiast aktualizowania obiektu. 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 , który Update-List używa. Ponadto wszystkie Set polecenia cmdlet akceptujące 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 kolekcji List . Metoda NewDeck() używa Update-Listmetody w celu 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() }
}

Uwaga

Polecenie Update-List cmdlet zwraca zaktualizowany obiekt do potoku. Przesyłamy dane wyjściowe do potoku, aby Out-Null pominąć niepożądane wyświetlanie.

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 , aby reprezentować talii kart i kart przechowywanych przez dwóch graczy. Używamy Update-List polecenia cmdlet , 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żywanie parametrów Dodaj i Usuń w jednym poleceniu. W tym przykładzie gracz 1 chce odrzucić 4♦ i 6♦ 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, zwraca tabelę skrótu opisjącą Update-List aktualizację zamiast aktualizować obiekt. Można rzutować tabelę skrótu na obiekt System.PSListModifier i użyć ApplyTo() metody w celu zastosowania zmiany ustawionej 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-Listelementu .

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 pominięto ten parametr, Update-List zwraca 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 Property to polecenie cmdlet zwraca zaktualizowany obiekt.