初めに
PowerShellの配列は要素を追加することが難しいのでC#などで使われるList<T>を試してみたいと思います。
Namespaceの指定
以下のサンプルは事前にネームスペースを指定した状態で実行しています。
using namespace System.Collections.Generic
文字列のList
Listの要素にstring(文字列)を指定してみます。
初期化
$strings = [List[string]]::new()
追加
$strings.Add("a")
$strings.Add("b")
$strings.Add("c")
PowerShellの配列では追加が出来ませんでした。
削除
$strings.RemoveAt(1)
追加と同様に削除も出来ませんでしたが、Listでは出来ました。
インデックスを指定し変更
$strings[1] = "C"
インデックスを指定し参照
Write-Host $strings[1]
# C
件数を取得
Write-Host $strings.Count
# 2
ForEach-Objectによるループ
$strings | ForEach-Object { Write-Host $_ }
# a
# C
Sort-Objectによる並べ替え(降順)
$strings | Sort-Object -Descending
# C
# a
インデックスに-1
Write-Host ("-1:{0}" -f $strings[-1])
# -1:C
末尾の要素
スライス
Write-Host $strings[0..1]
# a C
配列をクリア
$strings.Clear()
Write-Host $string.Count
# 0
PSCustomObjectのList
PowerShellで汎用的に使われるPSCustomObjectを要素にしたListを試します。
初期化
$objects = [List[PSCustomObject]]::new()
配列からListへ要素を追加
@([PSCustomObject]@{
Name = "A"
Value = 1
},
[PSCustomObject]@{
Name = "B"
Value = 2
},
[PSCustomObject]@{
Name = "C"
Value = 3
},[PSCustomObject]@{
Name = "D"
Value = 4
}) | % { $objects.Add($_)}
本当は初期化で実施したいのですが、方法を見つけられませんでした。
Select-Objectによる項目の追加
$objects | Select-Object -Property Name, Value, @{label = "Dobule";expression = {$_.Value * 2}}
#Name Value Dobule
#---- ----- ------
#A 1 2
#B 2 4
#C 3 6
#D 4 8
Selectなのに項目が増やせてしまいます。
Where-Objectによる絞り込み
$objects | Where-Object { $_.Value -lt 3 }
#Name Value
#---- -----
#A 1
#B 2
Sort-Objectによる並べ替え
$objects | Sort-Object -Property Value -Descending
#Name Value
#---- -----
#D 4
#C 3
#B 2
#A 1
最後に
PowerShellの配列と初期化の方法が異なるだけで、ほぼ同じ処理が出来ることが確認できました。
コメント