Set (структура данных) в PowerShell

Есть ли способ определить Установить структуру данных в PowerShell?

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

Мне нужно использовать структуру данных как хранилище ключей, которое:

  • гарантирует отсутствие повторений;
  • минимизирует вычислительные усилия для извлечения и удаления элемента.

Ответ 1

Вы можете использовать класс .NET HashSet, который находится в System.Collections.Generic:

$set = New-Object System.Collections.Generic.HashSet[int]

Коллекция гарантирует уникальные элементы и Add, Remove и Contains все работают с усложнением O (1) в среднем.

Ответ 2

Если вы предпочитаете придерживаться собственных типов PowerShell, вы можете использовать HashTable и просто игнорировать значения ключей:

# Initialize the set
$set = @{}

# Add an item
$set.Add("foo", $true)

# Or, if you prefer add/update semantics
$set["foo"] = $true

# Check if item exists
if ($set.Contains("foo"))
{
    echo "exists"
}

# Remove item
$set.Remove("foo")

Для получения дополнительной информации см.: https://powershellexplained.com/2016-11-06-powershell-hashtable-everything-you-wanted-to-know-about/#removing-and-clearing-keys