Главная > Powershell > Упорядоченные хэш-таблицы в Powershell

Упорядоченные хэш-таблицы в Powershell

В Powershell при создании хеш-таблицы классическим способом элементы в ней располагаются не в том порядке, в котором они заносятся:

$HashTable = @{}

$HashTable.Name = 'Serg'
$HashTable.Position = 'admin'
$HashTable.Location = 'Ukraine'

PS C:\> $HashTable

Name                           Value
----                           -----
Position                       admin
Name                           Serg
Location                       Ukraine

Начиная  с Powershell 3.0 появилась возможность создавать упорядоченные хеш-таблицы (в оригинале Ordered Hash Tables, в русском языке я про них упоминания не встретил, поэтому взял на себя смелость перевести лично). В упорядоченных хеш-таблицах, в отличии от обычных при добавлении элемента можно указать его индекс в таблице.

Для создания такой таблицы в момент её создания нужно указать ключевое слово ordered:

$HashTable = [Ordered]@{}

Далее таблица заполняется как обычная хеш-таблица:

$HashTable.Name = 'Serg'
$HashTable.Position = 'admin'
$HashTable.Location = 'Ukraine'

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

PS C:\> $HashTable

Name                           Value
----                           -----
Name                           Serg
Position                       admin
Location                       Ukraine

При добавлении элемента обычным способом

$HashTable.Add('ID', 1)

новый элемент добавится в конец:

PS C:\> $HashTable

Name                           Value
----                           -----
Name                           Serg
Position                       admin
Location                       Ukraine
ID                             1

Если же нужно добавить элемент не в конец, а куда-то в середину (или в начало) нужно воспользоваться методом Insert(), указав индекс добавляемого элемента. При этом нужно помнить, что порядок элементов начинается с 0:

$HashTable.Insert(0, 'ID', 1)

В этом случае хеш-таблица будет выглядеть следующим образом:

PS C:\> $HashTable

Name                           Value
----                           ----
ID                             1
Name                           Serg
Position                       admin
Location                       Ukraine
Реклама
Рубрики:Powershell Метки:
  1. Андрей
    18/04/2015 в 22:50

    Споткнулся на простой вроде проблеме. Есть хэш-таблица. Надо её сохранить в файл. Потом надо её из файла импортнуть, заменить значение какого-либо из ключей и опять экспорт. В csv у меня вообще экспорт не удался. Какая-то лажа в файле вместо данных. При сохранении в текстовый файл, не пойму как потом эти данные превратить в хэш-таблицу. Get-Content $PathStatTxt -Raw выдает string. ConvertFrom-StringData -StringData ([io.file]::ReadAllText($FilePath)) выдает ошибку, ибо в файле строка «Name Value» как данные не читаются.

    • 20/04/2015 в 10:05

      Все верно. Вам нужно сохранять данные в xml-файл, и потом считывать из него:

      $HashTable | Export-Clixml c:\hashtab.xml
      $Temp = ‘c:\hashtab.xml’ | Import-Clixml

  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: