配列

配列はカンマ区切りで定義します

配列

基本はカンマ区切りで定義します。

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

動画による説明はこちら。

参考リンク

About Arrays | Microsoft Docs

About join | Microsoft Docs

About Split | Microsoft Docs


スポンサーリンク