Update-List

Добавляет и удаляет элементы из значении свойства, содержащего коллекцию объектов.

Синтаксис

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

Описание

Командлет Update-List добавляет, удаляет или заменяет элементы в значении свойства объекта и возвращает обновленный объект. Этот командлет предназначен для работы со свойствами, которые содержат коллекции объектов.

Параметры "Добавить и удалить " добавляют отдельные элементы и удаляют их из коллекции. Параметр Replace заменяет всю коллекцию.

Если свойство в команде не указано, возвращает хэш-список, Update-List описывающий обновление вместо обновления объекта. Позже этот набор изменений можно использовать для обновления объекта списка.

Этот командлет работает только в том случае, если обновляемое свойство поддерживает интерфейс IList , который Update-List используется. Кроме того, все Set командлеты, принимаюющие обновление, должны поддерживать интерфейс IList .

Этот командлет был повторно введен в PowerShell 7.

Примеры

Пример 1. Добавление элементов в значение свойства

В этом примере мы создадим класс, представляющий колоду карта, где карта хранятся в виде объекта коллекции List. Метод NewDeck() используется Update-Listдля добавления полной палубы значений карта в коллекцию карта.

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

Примечание.

Командлет Update-List выводит обновленный объект в конвейер. Мы передаем выходные данные для Out-Null подавления нежелательного отображения.

Пример 2. Добавление и удаление элементов свойства коллекции

Продолжая код в примере 1, мы создадим экземпляры класса Карточек для представления колоды карта и карта, удерживаемых двумя игроками. Мы используем Update-List командлет для добавления карта в руки игроков и удаления карта из палубы.

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

Выходные данные показывают состояние палубы до того, как карта были рассмотрены игроками. Вы можете увидеть, что каждый игрок получил пять карта из колоды. Окончательные выходные данные показывают состояние палубы после работы карта игроков. Update-Listиспользовался для выбора карта из палубы и добавления их в коллекцию игроков. Затем карта игроков были удалены из палубы с помощьюUpdate-List.

Пример 3. Добавление и удаление элементов в одной команде

Update-List позволяет использовать параметры добавления и удаления в одной команде. В этом примере проигрыватель 1 хочет не карта 4♦ и 6♦ получить два новых карта.

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

Пример 4. Применение набора изменений к объекту списка

Если свойство не указано, Update-List возвращает хэш-файл, описывающий обновление вместо обновления объекта. Хэш-файл можно привести к объекту System.PSListModifier и использовать ApplyTo() метод для применения набора изменений к списку.

$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

Параметры

-Add

Задает значения свойств, которые необходимо добавить в коллекцию. Введите значения свойств в том порядке, в котором они должны располагаться в коллекции.

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

-InputObject

Задает объекты для обновления. Можно также передать объект, в который нужно обновить Update-List.

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

-Property

Указывает свойство, содержащее обновляемую коллекцию. Если этот параметр не указан, Update-List возвращает объект, представляющий изменение, а не изменение объекта.

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

-Remove

Задает значения свойств, которые необходимо удалить из коллекции.

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

-Replace

Задает новую коллекцию. Этот параметр заменяет все элементы в исходной коллекции новыми элементами, которые определяются этим параметром.

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

Входные данные

PSObject

Объект можно передать в этот командлет.

Выходные данные

Hashtable

По умолчанию этот командлет возвращает хэш-файл, описывающий обновление.

Object

При указании параметра Property этот командлет возвращает обновленный объект.