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


Update-List

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

Синтаксис

AddRemoveSet (по умолчанию)

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

ReplaceSet

Update-List
    [[-Property] <String>]
    -Replace <Object[]>
    [-InputObject <PSObject>]
    [<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[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

AddRemoveSet
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-InputObject

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

Свойства параметра

Тип:PSObject
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:True
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Property

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

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:0
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Remove

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

Свойства параметра

Тип:

Object[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

AddRemoveSet
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Replace

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

Свойства параметра

Тип:

Object[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ReplaceSet
Position:Named
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

CommonParameters

Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.

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

PSObject

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

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

Hashtable

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

Object

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