PowerShell3.0の言語仕様を眺めていたら気になる型があったのでそのことについて調べたことを備忘録を兼ねて残しておきます。
言語仕様のTypeのところを眺めていたら、このように書いてありました。
Type ordered is a pseudo type used only for conversions.
訳「order型は変換のための疑似的な型です。」
PowerShellにはorder型というものがあって、しかもそれは型変換のためだけに使われるらしいとのこと。
最初、この文言を見て、意味不明過ぎてフリーズしましたよ。
というわけで、PowerShellのorder型について調べてみました。
結論
ordered 型とはハッシュテーブルをSystem.Collections.Specialized.OrderedDictionaryに変換するために使う型です。
実験
普通のHashTableを作るときと、order型を使ってOrderedDictionaryを作るときの流れを比較してみます。
HashTableの作成
@{}を使ってHashTableを作成します。
$hashtable=@{'key1'='value1';'key2'='value2'}
型を確認します。
$hashtable.GetType() IsPublic IsSerial NameBaseType -------- -------- ------------ TrueTrueHashtableSystem.Object
ハッシュテーブル型のオブジェクトが作成されたことが確認できます。
OrderedDictionaryの作成
続いてOrderedDictionaryを作成してみます。
先ほどのHashTableの例の右辺に[oredered]を指定してみます。
$ordereddictionary=[ordered]@{'key1'='value1';'key2'='value2'}
型を確認すると
$ordereddictionary.GetType() IsPublic IsSerial NameBaseType -------- -------- ------------ TrueTrueOrderedDictionarySystem.Object
OrderedDictionaryが作成されたことが確認できました。
order型を使うと、ハッシュテーブルの作成時に型を指定できることがわかりました。
OrderedDictionaryって?
HashTableと違って、ちゃんと追加した要素の順番を保持してくれる連想配列です。
keyとvalueのペアですが、keyでのアクセスだけでなく、indexでアクセスすることができます。
終わりに
PowerShellの謎の型、orderedについての解説でした。
言語仕様も、もう少しわかりやすく書いてくれるとちょっとHappyですね。
というわけで、ここまでお読みいただき、ありがとうございました。