对Hashtable进行排序并将其分配给Powershell中的新变量

时间:2011-01-11 09:52:31

标签: powershell powershell-v2.0

我想知道如何使用以下命令将已排序的hasttable分配给新变量。我使用以下命令

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

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

但是在运行之后我无法遍历生成的哈希表

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

有什么想法吗?

3 个答案:

答案 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之后它是什么类型的对象。但至少它的行为就像一个有序的哈希表: - )