適材適所

PowerShellやVBAなどプログラミング系の話多めで

【PowerShellの型】Orderd typeについて[ordered]

PowerShell3.0の言語仕様を眺めていたら気になったので調べたことメモ。

言語仕様にはこう書いてありました。

Type ordered is a pseudo type used only for conversions.

訳「order型は変換のための疑似的な型です。」

これだけ。

最初、意味不明過ぎて気になってしまいました。

結論

ordered type(型)はSystem.Collections.Specialized.OrderedDictionaryに変換するためだけの型です。

実験

HashTableを作るときとorder型を使ってOrderedDictionaryを作るときの流れを比較してみます。

HashTableの作成

@{}を使ってHashTableを作成します。

 
$hashtable=@{'key1'='value1';'key2'='value2'}

型を確認します。

$hashtable.GetType()

IsPublic IsSerial NameBaseType
-------- -------- ------------
TrueTrueHashtableSystem.Object

OrderedDictionaryの作成

今度は先ほどのHashTableの例の右辺に[oredered]を指定してみます。

 
$ordereddictionary=[ordered]@{'key1'='value1';'key2'='value2'}

型を確認すると

$ordereddictionary.GetType()

IsPublic IsSerial NameBaseType
-------- -------- ------------
TrueTrueOrderedDictionarySystem.Object

OrderedDictionaryが作成されました。

OrderedDictionaryって?

HashTableと違って、ちゃんと追加した要素の順番を保持してくれる連想配列です。

keyとvalueのペアですが、keyでのアクセスだけでなく、indexでアクセスすることができます。

終わりに

言語仕様も、もう少しわかりやすく書いてくれるとちょっとHappyですね。