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