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 |
Входные данные
Объект можно передать в этот командлет.
Выходные данные
По умолчанию этот командлет возвращает хэш-файл, описывающий обновление.
При указании параметра Property этот командлет возвращает обновленный объект.
Связанные ссылки
PowerShell
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по