Сортировка столов ha sh (столов ha sh) - PullRequest
0 голосов
/ 13 февраля 2020

Я врезался в стену, пытаясь собрать таблицу ha sh таблиц ha sh. Кажется, что сортировка превращает таблицу ha sh во что-то еще, и я не могу пройтись по новой структуре.

$mainHashTable = @{}
$mainHashTable.Add('B', @{'one'='B1'; 'two'='B2'; 'three'='B3'})
$mainHashTable.Add('D', @{'one'='D1'; 'two'='D2'; 'three'='D3'})
$mainHashTable.Add('A', @{'one'='A1'; 'two'='A2'; 'three'='A3'})
$mainHashTable.Add('C', @{'one'='C1'; 'two'='C2'; 'three'='C3'})

CLS
$mainHashTable
foreach ($hashtable in $mainHashTable.keys) {

    foreach ($itemKey in $mainHashTable.$hashtable.keys) {
        Write-Host "$itemKey $($mainHashTable.$hashtable.$itemKey)!"
    }
}
Write-Host
$sortedHashTable = $mainHashTable.GetEnumerator() | sort-object -property name
$sortedHashTable
foreach ($hashtable_S in $sortedHashTable.keys) {
    foreach ($itemKey_S in $sortedHashTable.$hashtable_S.keys) {
        Write-Host "$itemKey_S $($sortedHashTable.$hashtable_S.$itemKey2)!"
    }
}

Две строки, которые сбрасывают $mainHashTable & $sortedHashTable на консоль похоже все нормально. Но второй набор l oop ничего не делает. Я пробовал приведение как этот

$sortedHashTable = [hashtable]($mainHashTable.GetEnumerator() | sort-object -property name)

, и это просто выдает ошибку

Не удается преобразовать значение "System.Object []" типа "System.Object []" введите "System.Collections.Hashtable".

Итак, есть ли какой-нибудь способ преобразовать системный объект в таблицу ha sh, поэтому структура l oop работает с отсортированными результатами ? Или мне лучше научиться обходить структуру System.Object? И (возможно, академически), есть ли способ отсортировать таблицу ha sh и вернуть таблицу ha sh?

1 Ответ

2 голосов
/ 13 февраля 2020

В данный момент вы разбиваете хеш-таблицу на список отдельных записей (через .GetEnumerator()), а затем сортируете , что - так что в итоге $sortedHashTable будет просто массивом key / value пара объектов, отсортированных по ключу, а не фактическая [hashtable].

есть ли способ отсортировать таблицу ha sh и вернуть таблицу ha sh ?

Нет - вы не можете "отсортировать встроенную таблицу ha sh", поскольку хеш-таблицы не сохраняют ни одного гарантированного порядка ключей.

Путь к go здесь копировать записи в упорядоченный словарь в следующем порядке:

$sortedHashTable = [ordered]@{}

# Sort the keys, then insert into our ordered dictionary
foreach($key in $mainHashTable.Keys |Sort-Object){
    $sortedHashTable[$key] = $mainHashTable[$key]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...