Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

【PowerShell】ハッシュテーブル(連想配列)を使う

PowerShellには配列と似たような機能として、ハッシュテーブル(連想配列)というものがある。機能として、一つ以上の値をまとめて格納して扱うことができる変数だが、配列は各要素を取り出す際にインデックス(0から始まる連番)で指定するのに対して、ハッシュテーブルではキーと呼ばれるキーワードを用いる。キーワードはKeysプロパティで取得でき、その対となる値はValuesプロパティで取得できる。要素を取り出す際に、存在しないキーを指定すると何も返らないことに注意。以下、作成と操作例。

PS > $umamusume = @{rice = "石見舞菜香"; doto = "和多田美咲"}
PS > $umamusume
Name                           Value
----                           -----
doto                           和多田美咲
rice                           石見舞菜香
PS > $umamusume["rice"]
石見舞菜香
PS > $umamusume["rise"]
PS > $umamusume.Keys
doto
rice
PS > $umamusume.Values
和多田美咲
石見舞菜香

要素を追加するにはAddプロパティを、削除するにはRemoveプロパティを使う。

PS > $umamusume.Add("creek", "優木かな")
PS > $umamusume
Name                           Value
----                           -----
creek                          優木かな
doto                           和多田美咲
rice                           石見舞菜香
PS > $umamusume.Remove("doto")
PS > $umamusume
Name                           Value
----                           -----
creek                          優木かな
rice                           石見舞菜香

ハッシュテーブルの型とメンバは以下のとおり。

PS > $umamusume.GetType()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Hashtable                                System.Object
PS > $umamusume["rice"].GetType()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object
PS > Get-Member -InputObject $umamusume
   TypeName: System.Collections.Hashtable
Name              MemberType            Definition
----              ----------            ----------
Add               Method                void Add(System.Object key, System.O...
Clear             Method                void Clear(), void IDictionary.Clear()
Clone             Method                System.Object Clone(), System.Object...
(表示省略)
Keys              Property              System.Collections.ICollection Keys ...
SyncRoot          Property              System.Object SyncRoot {get;}
Values            Property              System.Collections.ICollection Value...