2011-01-11 11 views
1

新しい変数に次のコマンドを使ってソートされたhasttableを割り当てる方法を知りたいと思います。私は、次のコマンドHashtableを並べ替えてPowershellの新しい変数に割り当てます

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

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

を使用していますが、それを実行した後、私は、得られたハッシュテーブル

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

任意のアイデアに行き来できないのですか?

+2

私のために働きます。 「それは働いていない」とはどういう意味ですか? – stej

+0

申し訳ありませんが私の悪い..私の主な問題は、私は結果のhastableをトラバースすることはできません – nabeelfarid

答えて

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経由で使用するよりも、はるかに高速です。 OPへ

+0

素晴らしい!あなたもこれを見てみてください。plst http://stackoverflow.com/questions/4658759/assigning-an-array-to-a-dictionary-entry-in-powershell – nabeelfarid

+0

すでに解決済みです:) – stej

3

$htSorted.GetType()$htSorted | GetMembersを実行した後、Sort-Objectコマンドレットが辞書エントリの何も返さないことがわかります。あなたがソートされたハッシュテーブルを持っている必要があり

foreach($item in $htSorted) 
{ 
    $item.Key 
    $item.Value  
} 
+2

+1。ここで理解することが重要です:ハッシュテーブルはエントリの順序がありません。彼らのまさにその定義によって彼らは持っていません。そして、ソートの結果はもはやハッシュテーブルではありません。 – Joey

+0

次のようにすると、 '' $ this.HyperVHosts.Clone()。GetEnumerator()| Sort-Object -Property Value -Descending''' あなたは辞書項目の配列を取得します。しかし、それらをハッシュテーブルにグループ化することができます: '' '$ this.HyperVHosts.Clone()。GetEnumerator()|ソートオブジェクト - プロパティ値 - 低下|グループオブジェクト - AsHashTable''' –

0

回答:あなたがソートされた "ハッシュテーブル" を設定している

正しくが、その後、あなたは書く:


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

ソート「ハッシュテーブルを反復処理するために次のコードを使用してください:


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

私はまた、本質的に並べ替えられたhastableが存在しないと聞いていたので、私はそれがどのような種類のオブジェクトをsort-objectに入れたのかわかりません。しかし少なくともそれはソートされたハッシュテーブルのように振る舞います:-)

関連する問題