Update-List

Agrega elementos a y quita elementos de un valor de propiedad que contenga una colección de objetos.

Syntax

Update-List
      [-Add <Object[]>]
      [-Remove <Object[]>]
      [-InputObject <PSObject>]
      [[-Property] <String>]
      [<CommonParameters>]
Update-List
      -Replace <Object[]>
      [-InputObject <PSObject>]
      [[-Property] <String>]
      [<CommonParameters>]

Description

El Update-List cmdlet agrega, quita o reemplaza elementos en un valor de propiedad de un objeto y devuelve el objeto actualizado. Este cmdlet está diseñado para las propiedades que contienen colecciones de objetos.

Los parámetros Add y Remove agregan elementos individuales a y los quitan de la colección. El parámetro Replace reemplaza toda la colección.

Si no especifica una propiedad en el comando , Update-List devuelve una tabla hash que describe la actualización en lugar de actualizar el objeto. Más adelante, puede usar este conjunto de cambios para actualizar un objeto de lista.

Este cmdlet solo funciona cuando la propiedad que se actualiza admite la interfaz IList que Update-List usa. Además, los Set cmdlets que aceptan una actualización deben admitir la interfaz IList .

Este cmdlet se ha vuelto a introducir en PowerShell 7.

Ejemplos

Ejemplo 1: Agregar elementos a un valor de propiedad

En este ejemplo se crea una clase que representa una baraja de cartas donde las tarjetas se almacenan como un objeto de colección List . El método NewDeck() usa Update-Listpara agregar una baraja completa de valores de tarjeta a la colección de tarjetas .

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() }
}

Nota:

El Update-List cmdlet genera el objeto actualizado en la canalización. Canalizamos la salida para Out-Null suprimir la pantalla no deseada.

Ejemplo 2: Agregar y quitar elementos de una propiedad de colección

Siguiendo con el código del ejemplo 1, crearemos instancias de la clase Cards para representar una baraja de cartas y las cartas que mantienen dos jugadores. Usamos el Update-List cmdlet para agregar cartas a las manos de los jugadores y para quitar cartas de la baraja.

$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♥

La salida muestra el estado de la baraja antes de que las cartas se trataran a los jugadores. Puedes ver que cada jugador recibió cinco cartas de la baraja. La salida final muestra el estado de la baraja después de tratar las cartas a los jugadores. Update-List se usó para seleccionar las cartas de la baraja y agregarlas a la colección de jugadores. A continuación, las cartas de los jugadores se quitaron de la baraja mediante Update-List.

Ejemplo 3: Agregar y quitar elementos en un solo comando

Update-List permite usar los parámetros Agregar y Quitar en un solo comando. En este ejemplo, el Jugador 1 quiere descartar y 4♦6♦ obtener dos tarjetas nuevas.

# 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♥

Ejemplo 4: Aplicar un conjunto de cambios a un objeto de lista

Si no especifica una propiedad, Update-List devuelve una tabla hash que describe la actualización en lugar de actualizar el objeto. Puede convertir la tabla hash en un objeto System.PSListModifier y usar el ApplyTo() método para aplicar el conjunto de cambios a una lista.

$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

Parámetros

-Add

Especifica los valores de propiedad que se agregarán a la colección. Escriba los valores en el orden en que deberían aparecer en la colección.

Type:Object[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Especifica los objetos que se actualizarán. También puede canalizar el objeto que se va a actualizar a Update-List.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Property

Especifica la propiedad que contiene la colección que se está actualizando. Si omite este parámetro, Update-List devuelve un objeto que representa el cambio en lugar de cambiar el objeto.

Type:String
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Remove

Especifica los valores de propiedad que se van a quitar de la colección.

Type:Object[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Replace

Especifica una nueva colección. Este parámetro reemplaza todos los elementos de la colección original por los elementos especificados por este parámetro.

Type:Object[]
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Entradas

PSObject

Puede canalizar el objeto para que se actualice a este cmdlet.

Salidas

Hashtable

De forma predeterminada, este cmdlet devuelve una tabla hash que describe la actualización.

Object

Al especificar el parámetro Property , este cmdlet devuelve el objeto actualizado.