Сортируйте Hashtable и назначьте его новой переменной в Powershell - PullRequest
1 голос
/ 11 января 2011

Я хотел бы знать, как назначить отсортированный hasttable с помощью следующей команды для новой переменной.Я использую следующую команду

$ht =   @{ 
           1 = "Data1"; 
           3 = "Data3"; 
           2 = "Data2"; 
         }

$htSorted = $ht.GetEnumerator() | Sort-Object Name

, но после ее запуска я не могу перейти к результирующей хеш-таблице

foreach($key in $htSorted.Keys)
{
     $item[$key]
}

Есть идеи?

Ответы [ 3 ]

5 голосов
/ 11 января 2011

Если вам нужна отсортированная хеш-таблица, вы можете использовать SortedDictionary. Пример:

$s = New-Object 'System.Collections.Generic.SortedDictionary[int, string]'
1..20 | % { 
  $i = (Get-Random -Minimum 0 -Maximum 100)
  write-host $i
  $s[$i] = $i.ToString() 
}
$s

Я создал 20 случайных значений и сохранил их в словаре. Затем, когда PowerShell просматривает словарь (через GetEnumerator()), значения сортируются по ключам.

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

3 голосов
/ 11 января 2011

После выполнения $htSorted.GetType() и $htSorted | GetMembers оказывается, что командлет Sort-Object возвращает набор словарных статей.Следовательно я могу пройти это просто следующим образом:

foreach($item in $htSorted)
{
     $item.Key
     $item.Value    
}
0 голосов
/ 03 февраля 2013

Ответ на OP:

Вы правильно настраиваете отсортированную "хеш-таблицу", но затем пишете:


foreach($key in $htSorted.Keys)
{
     $item[$key]
}

Чтобы выполнить итерацию поотсортированный "hashtable", пожалуйста, используйте следующий код:


foreach($item in $htSorted.GetEnumerator())
{
     write-host $item.key
     write-host $item.value
}

Поскольку я также слышал, что отсортированный hastable по своей природе не может существовать, я не знаю, что это за объект после его прохожденияобъект сортировки.Но, по крайней мере, он ведет себя как отсортированная хеш-таблица: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...