#11 配列とハッシュテーブルで業務効率アップ

配列とハッシュテーブルの画像 PowerShell

本日のお題は「配列とハッシュテーブル」です。
みなさまもうすでに配列やハッシュテーブルは使ってますでしょうか?
「まだ変数に代入しかしてないよー!」という方は特に必見です!
なんと変数の中に複数の要素を持たせておくことができるのです。
一人一役ではなく一人100役のような凄いことです!

ではまず配列について、配列の基本的なコードは以下の様になります。

# $fruitsという変数に@()で囲むことでその中身を配列にすることができます
# 中身を区切るときは",(カンマ)"を使います
$fruits = @("Apple", "Banana", "Cherry")

# 配列の使い方
# 先ほど変数$fruitsに格納したデータを左から0,1,2という順番で呼び出すことができます
# 大事なのが配列は「0」から始まるということを覚えましょう
$fruits[0]  # Appleが出力される

# 「0」から始まるという注意の例が以下のforの処理になります
for($i = 0; $i -lt $fruits.Count; $i++){
    Write-Output "i like $($fruits[$i])" # $iを配列の番号に入れることで順番に取り出せます
}

# 配列データの追加は「+=」を使います
$fruits += "Orange"

# 配列データの上書きは「$変数[変えたい番号] = データ」というようにします
$fruits[2] = "Grape"

# foreachを使うことで0から順番に出力できます
foreach ($fruit in $fruits) {
    Write-Output "I like $fruit"
}

# 上記foreachの出力
I like Apple
I like Banana
I like Grape   # Cherryから書き換わっている
I like Orange  # 追加されている

業務でよく使われる方法だとGet-ChildItemで特定のファイル(作業日の日付yyyyMMddであったり、*.txtのような拡張子を指定して取得)を配列に入れて処理を加えるという流れが考えられるかなと思います。
またその取得したファイルデータを更に配列に格納してーということも考えられます。
そのため変数名はわかりやすいものにすると良いでしょう。
例:$work_files, $data_lists
ちなみに2次元配列というものもあって、配列の中に配列という作りになります。

# 2次元配列の作成(3行×3列) 青色は次に出力した箇所
$matrix = @(
    @(1, 2, 3),
    @(4, 5, 6),
    @(7, 8, 9)
)

# 要素へのアクセス(行と列を指定)
$matrix[0][1]  # → 2(1行目の2列目)
$matrix[2][0]  # → 7(3行目の1列目)

# 以下の様に考えるとわかりやすいかも?
# $matrix[0]の群の配列:@(1, 2, 3)
# $matrix[1]の群の配列:@(4, 5, 6)
# $matrix[2]の群の配列:@(7, 8, 9)

# すべての要素を表示
foreach ($row in $matrix) { # ここで各群が処理される
    foreach ($cell in $row) { # ここで各群の1要素ずつ処理される
        Write-Host $cell -NoNewline
        Write-Host " "
    }
    Write-Host ""
}

お次はハッシュテーブルについてです。
ハッシュテーブルは辞書配列とも呼ばれていて、データに目次やラベルのように名前を付けて変数に格納することができます!
何はともあれ基本コードを見てみましょう。

# $personという変数に@{}で囲むことでその中身をハッシュテーブルにすることができます
$person = @{
    Name = "Taro"
    Age  = 25
    Job  = "Officeworker"
}

# 変数の後ろに["ラベル名"]とすることで、対応するデータが呼び出されます
$person["Name"] # Taro
$person["Age"]  # 25
$person["Job"]  # Officeworker

# ハッシュテーブルのデータ追加方法です
# 新規で追加したいラベル名を書きます
$person["Hobby"] = "Blogging"

# 同じラベル名で書いてしまうと上書きされてしまうよ
$person["Age"] = 30 

$person["Age"]  # 30

# foreachでの出力方法
# 「.Keys」とすることでハッシュテーブルのキーつまり"Name", "Age", "Job"が順番に$keyに代入されます
foreach($key in $person.Keys){
    Write-Output $person[$key]
}


# ハッシュテーブルも2次元配列のようにできます
# ユーザー情報のリスト(配列の中にハッシュテーブル)
$users = @(
    @{ Name = "Alice"; Age = 28; Job = "Engineer" },
    @{ Name = "Bob";   Age = 35; Job = "Designer" },
    @{ Name = "Carol"; Age = 42; Job = "Manager" }
)

# 2人目の名前を取得
$users[1]["Name"]  # → Bob

# 全員の職業を表示
foreach ($user in $users) {
    Write-Host "$($user["Name"]) is a $($user["Job"])"
}

【まとめ】配列とハッシュテーブルの違い
①書き方
配列は@()
ハッシュテーブルは@{}

②呼び出し方
配列は $変数[0,1,2,…]
ハッシュテーブルは $変数[“ラベル名”]

③データ追加の方法
配列は $変数 += データ
ハッシュテーブルは $変数[“新しいラベル名”]

④データ更新の方法
配列は $変数[0,1,2,…] = データ
ハッシュテーブルは $変数[“ラベル名”] = データ

⑤foreachの方法
配列は foreach($item in $array){}
ハッシュテーブルは foreach($key in $hash.Keys){}

配列をうまく使いこなせばどんな難しいデータでも簡単に処理できそうですよね。
難しく見えますがやってみれば意外とすんなり習得できるはずです!
ぜひこの便利な配列、ハッシュテーブルで業務効率アップに繋げてみてください!

それでは、おつかれさまです!

コメント

タイトルとURLをコピーしました