分かりやすく、使いやすく。

foreach で連想配列(ハッシュ)の全ての要素を処理する方法

スポンサーリンク

PowerShell では foreach ステートメントを使用して連想配列の全ての要素を処理することができます。ちなみに連想配列(HashTable)では初期化時の並び順は保持されない為、並び替えを行いたい場合は事前にsortで並べ替える必要があります。並び替えについては連想配列(ハッシュ)をキーや値でソートする方法のページを参照してください。

  1. foreach のサンプルコード
  2. foreach にパイプで流し込む場合


foreach のサンプルコード

foreach で連想配列を処理するにはいくつかの方法がありますが、このサンプルコードでは3個の方法を紹介します。

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 連想配列(ハッシュ)を作成する。
# 【注意】HashTableでは初期化時の並び順は保持されません。
$my_hash = @{
    'Key1' = 'Val1';
    'Key2' = 'Val2';
    'Key3' = 'Val3';
};
 
# 連想配列を foreach で処理する。(GetEnumeratorを使用。)
Write-Host '1個目の foreach';
foreach($entry in $my_hash.GetEnumerator()){
    $key = $entry.Key;
    $val = $entry.Value;
    Write-Host $key;
    Write-Host $val;
}
 
# 連想配列を foreach で処理する。(Keysをループする。)
Write-Host '2個目の foreach';
foreach($key in $my_hash.Keys){
    $val = $my_hash[$key];
    Write-Host $key;
    Write-Host $val;
}
 
# 連想配列を foreach で処理する。(Valuesをループする。)
Write-Host '3個目の foreach';
foreach($val in $my_hash.Values){
    Write-Host $val;
} 

実行結果は次の通りです。連想配列(HashTable)では初期化時の順序は維持されません。

1個目の foreach
Key3
Val3
Key1
Val1
Key2
Val2
2個目の foreach
Key3
Val3
Key1
Val1
Key2
Val2
3個目の foreach
Val3
Val1
Val2 

foreach にパイプで流し込む場合

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 連想配列(ハッシュ)を作成する。
# 【注意】HashTableでは初期化時の並び順は保持されません。
$my_hash = @{
    'Key1' = 'Val1';
    'Key2' = 'Val2';
    'Key3' = 'Val3';
};
 
# 連想配列を foreach で処理する。(GetEnumeratorを使用。)
Write-Host '1個目の foreach';
$my_hash.GetEnumerator() | foreach{
    $key = $_.Key;
    $val = $_.Value;
    Write-Host $key;
    Write-Host $val;
}
 
# 連想配列を foreach で処理する。(Keysをループする。)
Write-Host '2個目の foreach';
$my_hash.Keys | foreach{
    $key = $_;
    $val = $my_hash[$_];
    Write-Host $key;
    Write-Host $val;
}
 
# 連想配列を foreach で処理する。(Valuesをループする。)
Write-Host '3個目の foreach';
$my_hash.Values | foreach{
    Write-Host $_;
} 

実行結果は次の通りです。連想配列(HashTable)では初期化時の順序は維持されません。

1個目の foreach
Key3
Val3
Key1
Val1
Key2
Val2
2個目の foreach
Key3
Val3
Key1
Val1
Key2
Val2
3個目の foreach
Val3
Val1
Val2 
スポンサーリンク
スポンサーリンク