ユーザ定義のクラスを要素とする配列をソートする

クラスの定義方法は 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