Поделиться через


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

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

Тип:Object[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-InputObject

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

Тип:PSObject
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Property

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

Тип:String
Position:0
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Remove

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

Тип:Object[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Replace

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

Тип:Object[]
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

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

PSObject

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

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

Hashtable

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

Object

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