ユーザ定義のクラスを要素とする配列をソートする
クラスの定義方法は C# とほとんど同じです。コンストラクタはクラスと同じ名称を使います。
ソートを実施するには、配列をパイプをつかって Sort-Object に流します。ソートキーは -Property を使ってメンバの名前を指定します。そのあとに何もつけなければ昇順のソートです。降順のソートにしたい場合は -Descending スイッチを指定します。
# ユーザ定義のオブジェクト.
class TheObject
{
# プロパティ
[int] $idx = -1
[string] $name = "xxx"
[int] $age = -1
# コンストラクタ(初期値のセットするメソッド)
TheObject([int]$arg_idx, [string]$arg_name, [int]$arg_age )
{
# プロパティに初期値をセット
$this.idx = $arg_idx
$this.name = $arg_name
$this.age = $arg_age
}
}
# オブジェクトを格納する配列の要素ゼロ宣言.
$arr = @()
# オブジェクトを配列に追加する.
$arr += New-Object TheObject( 0, "Shirai Kuroko", 13 )
$arr += New-Object TheObject( 1, "Uiharu Kazari", 13 )
$arr += New-Object TheObject( 2, "Saten Ruiko", 13 )
$arr += New-Object TheObject( 3, "Misaka Mikoto", 14 )
$arr += New-Object TheObject( 4, "Kongou Mitsuko", 14 )
$arr += New-Object TheObject( 5, "Kamijyou Touma", 16 )
$arr += New-Object TheObject( 6, "Tsuchimikado Motoharu", 16 )
$arr += New-Object TheObject( 7, "Aogami Piasu", 16 )
$arr += New-Object TheObject( 8, "Hukiyose Seiri", 16 )
$arr += New-Object TheObject( 9, "Himegami Aisa", 16 )
$arr += New-Object TheObject( 10, "Musujime Awaki", 17 )
$arr += New-Object TheObject( 11, "Nunotaba Shinobu", 18 )
$arr | Sort-Object -Property name
# $arr | Sort-Object -Property name -Descending
# $arr | Sort-Object -Property age
# $arr | Sort-Object -Property age -Descending
# $arr | Sort-Object -Property idx
# $arr | Sort-Object -Property idx -Descending
# 複数のメンバを考慮してソートする場合.
# $arr | Sort-Object -Property age, name -Descending
下記が実行結果です。
idx name age
--- ---- ---
7 Aogami Piasu 16
9 Himegami Aisa 16
8 Hukiyose Seiri 16
5 Kamijyou Touma 16
4 Kongou Mitsuko 14
3 Misaka Mikoto 14
10 Musujime Awaki 17
11 Nunotaba Shinobu 18
2 Saten Ruiko 13
0 Shirai Kuroko 13
6 Tsuchimikado Motoharu 16
1 Uiharu Kazari 13