我想知道如何使用以下命令将已排序的hasttable分配给新变量。我使用以下命令
$ht = @{
1 = "Data1";
3 = "Data3";
2 = "Data2";
}
$htSorted = $ht.GetEnumerator() | Sort-Object Name
但是在运行之后我无法遍历生成的哈希表
foreach($key in $htSorted.Keys)
{
$item[$key]
}
有什么想法吗?
答案 0 :(得分:5)
如果您需要有一个已排序的哈希表,可以使用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
排序要快得多。
答案 1 :(得分:3)
运行$htSorted.GetType()
和$htSorted | GetMembers
之后,事实证明Sort-Object cmdlet返回了一个字典条目的arrary。因此,我可以简单地进行如下操作:
foreach($item in $htSorted)
{
$item.Key
$item.Value
}
答案 2 :(得分:0)
回答OP:
您正在正确设置已排序的“哈希表”,但您写了:
foreach($key in $htSorted.Keys)
{
$item[$key]
}
为了遍历已排序的“哈希表”,请使用以下代码:
foreach($item in $htSorted.GetEnumerator())
{
write-host $item.key
write-host $item.value
}
由于我也听说过不可能存在排序的hastable,我不知道在通过sort-object之后它是什么类型的对象。但至少它的行为就像一个有序的哈希表: - )