powershell 排序对象:它可以使用对象的方法结果进行排序吗?

insrf1ej  于 2023-02-04  发布在  Shell
关注(0)|答案(1)|浏览(102)

使用Add-Member,我向对象数组添加了一个小方法,用于从字符串计算散列的排序:

$arr | Add-Member -MemberType ScriptMethod -Name 'SortedName' -Value {
    [string]$name = $this.Name
    [int]$start = [int][char]$name[0];
    [int]$index = [int]($name -replace '^.+?(\d+)\.[^.]+$','$1')

    [int]"$start$('{0:D4}' -f $index)"
}

现在我想使用$arr | Sort-Object -PropertyName 'SortedName'对数组排序,但是这看起来并不像预期的那样工作。
如何在数组的方法上应用Sort-Object

jv4diomz

jv4diomz1#

要对每个元素调用方法,需要使用计算表达式。
例如:

$arr = 0..10 | ForEach-Object {
    [pscustomobject]@{ Name = 'Test' + (Get-Random -Maximum 20) }
}

$arr | Add-Member -MemberType ScriptMethod -Name SortedName -Value {
    [int] ($this.Name -replace '\D+')
}

$arr | Sort-Object { $_.SortedName() }

相关问题