[Part.2]連想配列(ハッシュ)って何者?使い方は?

[myphp1 file=”SR-array-biginner”]

こんにちは。チェシャ男です。(-皿-)

本連載「PowerShell で配列デビュー」では、入門者向けに配列について解説します。

第1回で基本的な配列について解説しましたが、PowerShell には連想配列(ハッシュテーブル)という配列も存在します。今回は、この連想配列について解説します。

連想配列(ハッシュテーブル)について

第1回で説明した基本的な配列は、配列要素添字(インデックス)で扱うというものでしたね。添字は、”0(ゼロ))”から始まる連続した数字を使用していました。 このような基本的な配列は”1次元配列”と呼ばれます。

では、「連想配列とは」なんなのでしょうか。連想配列と言われても、「連想?配列?」となるでしょう。

連想配列とは…

連想配列(ハッシュテーブル)とは、

1つ以上の名前(キー)と値のペアを保存するデータ構造

を持った配列の事を指します。連想配列では、異なる複数のデータ型を”名前”と””を紐づけて格納することができ、データの検索や取得が非常に直感的に行えるようになっています。

この名前は、1次元配列で言うところの添字要素の関係だと思ってください。

1次元配列と違うところは、添字として割り振られる「”0” からの数字」を指定して要素を扱うのではなく、値に関連付けられたキーを指定して要素を扱います。第1回と同様に好きな食べ物シリーズで解説します。1次元配列の場合は、

  1. 好きな食べ物 はつけ麺 と 玉ねぎ と から揚げ
  2. 好きな食べ物 = つけ麺 , 玉ねぎ , から揚げ
  3. $好きな食べ物 =@(つけ麺 , 玉ねぎ, から揚げ)

★ 好きな食べ物の1つ目は”つけ麺”です。

のように要素を参照できます。この時の”1つ目”と”つけ麺”には、ただ順番がそうなっていただけで深い繋がりがあるわけではありません。

格納時の順番が違えば”1つ目”として呼び出される好きな食べ物は変わってしまいます。

  1. 好きな食べ物 は 玉ねぎ と つけ麺 と から揚げ
  2. 好きな食べ物 = 玉ねぎ , つけ麺 , から揚げ
  3. $好きな食べ物 =@(玉ねぎ , つけ麺, から揚げ)

★ 好きな食べ物の1つ目は”玉ねぎ”です。

では、これを連想配列の考え方に置き換えてみましょう。それぞれの好きな食べ物と深い繋がりがある言葉を連想して考えてみましょう。

  • つけ麺 → 麺類
  • 玉ねぎ → 野菜
  • から揚げ → 肉料理

では、連想した言葉を名前(キー)として配列を作り直してみます。

  1. 好きな食べ物 の 麺類 は つけ麺 で 野菜 は 玉ねぎ で 肉料理 は から揚げ
  2. 好きな食べ物 = (麺類=つけ麺 ; 野菜=玉ねぎ ; 肉料理=から揚げ)
  3. $好きな食べ物 =@{ 麺類=”つけ麺” ; 野菜=”玉ねぎ” ; 肉料理=”から揚げ”}

★ 好きな野菜は、玉ねぎです

このように連想配列では、玉ねぎという値に野菜というキーを紐づけ、

添字としてのただの数字ではなく、(連想される)意味のある言葉

を用いて直感的に要素を取り出すことができます。他人から見たときの可読性も断然違いますね。

連想配列の作成と参照

実際に Poweshell 上で連想配列を使用する場合、一次元配列と宣言方法や参照方法が異なります。

連想配列を宣言してみる

連想配列を作成するには、”@{ } (アット+中かっこ)”を宣言し、”; (セミコロン)”で要素を区切りながら”<名前(キー)>=<値(バリュー)>“を格納します。

1次元配列と同様、かっこ内を空白にしていれば空の連想配列が宣言されます。

PS C:\># 配列の宣言=> $変数 = @{<キー1>=<値1>;<キー2>=<値2>;<キー3>=<値3>}
PS C:\>
PS C:\> $array1 = @{men = "つけ麺";yasai = "玉ねぎ";niku = "から揚げ"}
PS C:\>
PS C:\># 空の連想配列
PS C:\> $array2 = @{}

このように、一次元配列の宣言と文法は違いますが宣言の流れは同じです。

連想配列の要素を参照してみる

参照においても、一次元配列の時と同様に変数($変数)を使用します。連想配列全ての情報を表示するには、変数名のみ指定します。

PS C:\> # $array1 = @{men = "つけ麺";yasai = "玉ねぎ";niku = "から揚げ"}
PS C:\> $array1

Name                           Value
----                           -----
men                            つけ麺
niku                           から揚げ
yasai                          玉ねぎ

PS C:\> $array2
PS C:\>

特定の値を取り出す場合は、一次元配列時と同様”[ ] (角かっこ)”を用います。ただし、添字ではなく、”名前(キー)”を指定します。また、一次元配列の時と同じ感覚で添字(”○番目”)を指定しても何も表示されません。

PS C:\> #$array1 = @{men = "つけ麺";yasai = "玉ねぎ";niku = "から揚げ"}
PS C:\>
PS C:\> $array1["men"]
つけ麺
PS C:\>
PS C:\> $array1["niku"]
から揚げ
PS C:\>
PS C:\> $array1["yasai"]
玉ねぎ
PS C:\>$array1[0]
PS C:\>

また、連想配列では配列の値をプロパティとして、”. (ドット演算子)“とキーから参照可能です。

PS C:\> #$array1 = @{men = "つけ麺";yasai = "玉ねぎ";niku = "から揚げ"}
PS C:\>
PS C:\> $array1."men"
つけ麺
PS C:\>
PS C:\>#"."で呼び出す際、ダブルクォーテーションはなくても良い
PS C:\> $array1.yasai
玉ねぎ

少しだけトリッキーな方法を使うならば、キー変数に格納して指定することも可能です。スクリプト作成時なんかは結構役に立ちますね!

PS C:\> #$array1 = @{men = "つけ麺";yasai = "玉ねぎ";niku = "から揚げ"}
PS C:\>
PS C:\> $key = "men"
PS C:\> $array1[$key]
つけ麺
PS C:\>
PS C:\> $key = "niku"
PS C:\> $array1.$key
から揚げ

また、「キーの一覧がほしい」場合は ”keys” プロパティ、「値の一覧がほしい」場合は ”Values” プロパティを指定し、”.” で呼び出します。

PS C:\> #$array1 = @{men = "つけ麺";yasai = "玉ねぎ";niku = "から揚げ"}
PS C:\>
PS C:\> #キー参照
PS C:\> $array1.Keys
men
niku
yasai
PS C:\> #値参照
PS C:\> $array1.Values
つけ麺
から揚げ
玉ねぎ

連想配列について、イメージはできましたか?

次回の第3回では、ここまで説明した「一次元配列」と「連想配列」に対する、代入や削除、変更といったもう少し難しい操作方法についてご紹介します。

次回も是非ご覧ください!お楽しみに!

チェシャ男おススメ!PowerShell 入門者の必携本 (-皿-)

本記事をお読みくださったあなたに、チェシャ男が実際に PowerShell の勉強に使っているイチ押しの書籍を紹介します!

こちらの書籍ではリファレンス情報だけではなく、PowerShell の基礎知識基本文法など約700ページにわたって解説しています!
初心者の場合、ネットでふらふらと情報を漁るよりは効率よく勉強ができると思いますよ!

本サイトでの Powershell 学習のお供に是非ご活用ください(*´皿`*)

疑問点等ございましたらお気軽にコメントください!

[myphp1 file=”SR-array-biginner”]

コメントを残す

メールアドレスが公開されることはありません。