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

配列内の値を検索する方法

スポンサーリンク

PowerShell で配列内の要素の値を検索するには IndexOf を使用します。IndexOf は指定した値を配列の先頭から検索し、最初に一致した場所のインデックスを返します。もし一致しない場合は IndexOf は -1 を返します。

  1. 最初に見つかった場所を検索する
  2. 同じ値が複数存在する場合、全ての場所を返す


最初に見つかった場所を検索する

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
# 要素が 5 個の配列を作成
$ary_names = @('太郎','次郎','三郎','四朗','五郎')
 
# 配列から太郎を検索し、その添え字を取得
$idx = [Array]::IndexOf($ary_names,'太郎')
 
# 1番目なので0と表示される。
Write-Host $idx
 
# 配列から三郎を検索し、その添え字を取得
$idx = [Array]::IndexOf($ary_names,'三郎')
 
# 3番目なので2と表示される。
Write-Host $idx
 
# 配列から五郎を検索し、その添え字を取得
$idx = [Array]::IndexOf($ary_names,'五郎')
 
# 5番目なので4と表示される。
Write-Host $idx
 
# 配列から花子を検索し、その添え字を取得
$idx = [Array]::IndexOf($ary_names,'花子')
 
# 存在ないので-1と表示される。
Write-Host $idx 

上記の実行結果は次の通りです。

実行結果
1
2
3
4
0
2
4
-1 

同じ値が複数存在する場合、全ての場所を返す

IndexOf は第三引数で検索を開始する場所を指定できます。これを使用することで配列に同じ値が複数値がある場合もすべてのインデックスを検索することができます。サンプルコードは次の通りです。

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
32
33
34
# 要素が 5 個の配列を作成
$ary_names = @('太郎','花子','太郎','花子','太郎')
 
$idx = -1
$counter = 0
 
while($TRUE){
    $idx = [Array]::IndexOf($ary_names, '太郎', $idx + 1)
    
    if($idx -ne -1){
        $counter ++
        Write-Host ('太郎の' + [string]$counter + "個目のインデックス→" + [string]$idx)
    }else{
        break
    }
}
 
Write-Host ('太郎は全部で' + [string]$counter + '個存在します。')
 
$idx = -1
$counter = 0
 
while($TRUE){
    $idx = [Array]::IndexOf($ary_names, '花子', $idx + 1)
    
    if($idx -ne -1){
        $counter ++
        Write-Host ('花子の' + [string]$counter + "個目のインデックス→" + [string]$idx)
    }else{
        break
    }
}
 
Write-Host ('花子は全部で' + [string]$counter + '個存在します。') 

上記の実行結果は次の通りです。

実行結果
1
2
3
4
5
6
7
太郎の1個目のインデックス→0
太郎の2個目のインデックス→2
太郎の3個目のインデックス→4
太郎は全部で3個存在します。
花子の1個目のインデックス→1
花子の2個目のインデックス→3
花子は全部で2個存在します。 
スポンサーリンク
スポンサーリンク