配列
配列はカンマ区切りで定義します
配列
基本はカンマ区切りで定義します。
PS> $array = "first", "second"
PS> $array
first
second
PS> $array = 1..4 # 連続した値の場合
PS> $array
1
2
3
4
要素のアクセス
PS> $array[1]
2
PS> $array[1,3]
2
4
PS> $array[1..3 + 0]
2
3
4
1
PS> $array[-1]
4
PS> $array[3..0]
4
3
2
1
PS> $array[1..-1]
2
1
4
空の配列と配列の配列
PS> $jag = @() # 空の配列
PS> $jag = @((1,2),(3,4)) # 配列の配列
PS> $jag[0][1]
2
配列を使う変数代入
Pythonでいうところのアンパック代入が可能です。
PS> $a,$b,$c,$d = $array
PS> $a;$b;$c;$d
1
2
3
4
PS> $first,$second = $jag
PS> $first
1
2
PS> $second
3
4
配列の要素の列挙(PowerShell V3以降)
変数が配列である場合、「配列.プロパティ」と書くとすべての要素のプロパティを列挙できます。
PS C:\Users\user\Desktop\test> $item = @(Get-ChildItem) # @()で囲むことで強制的に配列化できる例。しなくても今回の事は可能。
PS C:\Users\user\Desktop\test> $item.FullName
C:\Users\user\Desktop\test\test
C:\Users\user\Desktop\test\test2
C:\Users\user\Desktop\test\test3
すべての配列の要素に対して処理をする
いくつかの方法があります。
- ForEachメソッド
- ForEach-Objectコマンドレット
- foreach文
ForEachメソッド
PS> $array = 1..4
PS> $sum = 0
PS> $array.ForEach({$sum += $_})
PS> $sum
10
ForEach-Objectコマンドレット
PS> $sum = 0
PS> $array | ForEach-Object { $sum += $_ }
PS> $sum
10
foreach文
PS> $sum = 0
PS> foreach($element in $array){ $sum += $element }
PS> $sum
10
配列の結合
「+」で結合できます。
PS> $elements = "Element1", "Element2", "Element1", "Element19"
PS> $result = $array + $elements # 配列の結合
PS> $result
1
2
3
4
Element1
Element2
Element1
Element19
配列の繰り返し
かけ算で繰り返すことができます。
PS> $array * 2
1
2
3
4
1
2
3
4
配列から要素を見つける
要素を見つけるには比較演算子を使用します。
- -eq
- -like
- -match
PS> $elements -eq "Element1"
Element1
Element1
PS> $elements -like "*1*" # -likeはワイルドカード比較
Element1
Element1
Element19
PS> $elements -match "Element.." # -matchは正規表現比較
Element19
大小比較はソート順に注意する必要がある
PS> $elements -lt "Element2"
Element1
Element1
Element19 # 予想外の要素!
PS> $elements | sort
Element1
Element1
Element19
Element2
Whereメソッド
Whereメソッドを使用すると、配列の要素をフィルターできます。
# 構文
Where(scriptblock expression[, WhereOperatorSelectionMode mode
[, int numberToReturn]])
PS> $array.Where{$_ % 2}
1
3
PS> $array.Where{$_ % 2 -eq 0}
2
4
# 以下も同じ結果
PS> $array.Where({$_ % 2})
1
3
PS> $array.Where({$_ % 2 -eq 0})
2
4
Whereメソッドはモードを指定できます。
mode | 意味 |
---|---|
Default (0) | すべてのアイテムを返す |
First (1) | 最初のアイテムを返す |
Last (2) | 最後のアイテムを返す |
SkipUntil (3) | 条件が一致するまでのアイテムをスキップし、残りのアイテムを返す |
Until (4) | 条件が一致するまでのすべてのアイテムを返す |
Split (5) | 要素に一致するアイテムを1番目の要素として返す。 それ以外のアイテムを2番目の要素として返す |
PS> $array.Where({$_ -gt 2}, 'Default' , 1)
3
PS> $array.Where({$_ -gt 2}, 'First')
3
PS> $array.Where({$_ -gt 2}, 'Last')
4
PS> $array.Where({$_ -gt 2}, 'SkipUntil')
3
4
PS> $array.Where({$_ -gt 2}, 'Until')
1
2
PS> $array.Where({$_ -gt 2}, 'Split')
3
4
1
2
配列から要素を削除する
-ne, -notlike, -notmatchの比較演算子を使用しフィルターします。
PS> $elements -ne "Element1"
Element2
Element19
PS> $elements -notlike "*1*"
Element2
PS> $elements -notmatch "Element.."
Element1
Element2
Element1
実際に削除する場合は、元の変数に対して再代入します。
PS> $elements = $elements -ne "Element1"
PS> $elements
Element2
Element19
$null代入では、削除されません。
理由は、PowerShellでは配列は固定長であるため。
PS> $elements = "Element1", "Element2", "Element1", "Element19"
PS> $elements.Length
4
PS> $elements[0] = $null # $null代入で削除したつもり
PS> $elements # 見かけ上は削除されたように見える
Element2
Element1
Element19
PS> $elements.Length
4 # 想定外!削除前と配列の要素数が変わっていない
要素が配列に含まれているか確認する
以下の演算子(束縛演算子)を使用します。
- -contains
- -notcontains
- -in
- -notin
PS> $array -contains 4
True
PS> $array -notcontains 4
False
PS> 4 -in $array # PowerShell V3から使用可
True
PS> 4 -notin $array # PowerShell V3から使用可
False
配列と値の順番に気をつけましょう。
配列 -[not]contains 値
値 -[not]in 配列
文字列配列の演算子
結合する
「-join」演算子を使用します。
PS> $text = "Power","Shell"
# 値がある場合は、その値で結合する
PS> $text -join ","
Power,Shell
# 値がない場合は、単純に結合する
PS> -join $text
PowerShell
分割する
「-split」演算子を使用します。
PS> $joined = 'Power,Shell'
# 値がある場合は、その値で分割する
PS> $joined -split ","
Power
Shell
# 値がない場合は、自動分割する
PS> $text = "Power`r`n `tShell"
PS> $text
Power
Shell
PS> $text.count
1
PS> -split $text
Power
Shell
PS> (-split $text).count
2
分割する(SplitメソッドとSplit演算子)
文字列の分割には複数の方法があります。
- Splitメソッド(PowerShell V1から利用可能)
- Split演算子(PowerShell V2から利用可能)
PS> ${power shell} = "Power Shell"
# Splitメソッド
PS> ${power shell}.Split()
Power
Shell
# Split演算子
PS> -split ${power shell}
Power
Shell
YouTube
動画による説明はこちら。
参考リンク
スポンサーリンク