You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Sort-Object基于对象方法返回结果对数组排序?

问题解决:基于对象ScriptMethod排序的正确方式

你遇到的问题核心是:Sort-Object 的 -Property 参数默认只会查找对象的属性,而非调用方法。直接传入ScriptMethod的名称SortedName时,PowerShell找不到同名属性,自然无法按预期排序。

两种可行解决方案:

1. 直接在Sort-Object中调用ScriptMethod

使用计算属性(脚本块)触发方法执行,把方法返回值作为排序依据:

$arr | Sort-Object -Property @{ Expression = { $_.SortedName() } }

这里的关键是通过 $_.SortedName() 主动调用ScriptMethod(方法必须加()执行),而非仅传入方法名称。

2. 预先缓存方法计算结果(适合多次使用排序键的场景)

如果后续需要反复基于这个排序值操作,可以先把方法的计算结果转为对象的静态属性,再用属性排序:

# 先为每个对象添加静态属性存储排序值
$arr = $arr | ForEach-Object {
    $_ | Add-Member -MemberType NoteProperty -Name 'SortedNameKey' -Value $_.SortedName() -PassThru
}

# 基于静态属性排序
$arr | Sort-Object -Property 'SortedNameKey'

补充验证你的ScriptMethod逻辑

你的SortedName方法通过首字符ASCII码+补零的数字拼接成整数作为排序键,逻辑本身是可行的,但要注意正则^.+?(\d+)\.[^.]+$仅能匹配文件名最后一个点前的连续数字,如果文件名格式不符合(比如无数字、多段数字),可能会得到0或错误的数字,需要根据实际文件名格式调整正则。


内容的提问来源于stack exchange,提问作者AxD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:45:36