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

PowerShell数组排序异常排查及获取最后排序值需求

问题分析与解决

你的脚本排序失效的核心原因是正则匹配逻辑错误:[regex]::Match($_,'\d+')只会提取字符串中第一组连续数字(比如所有Project-a1-xxx里的1),导致所有对象的Numeric属性值都是1,排序自然无法区分顺序。

修正后的脚本

$string = @("Project-a1-1", "Project-a1-10", "Project-a1-2", "Project-a1-5", "Project-a1-6", "Project-a1-8")

# 直接通过ForEach-Object输出对象,避免低效的+=操作
$myobjecttosort = $string | ForEach-Object {
    # 匹配字符串末尾的连续数字,确保拿到最后一段编号
    $lastNum = [int]([regex]::Match($_, '\d+$').Value)
    [PSCustomObject]@{    
        String  = $_
        Numeric = $lastNum
    }
}

# 按Numeric升序排序,输出表格
$sortedResult = $myobjecttosort | Sort-Object Numeric | Select-Object Numeric, String | Format-Table -AutoSize
$sortedResult

# 获取排序后的最后一个值
$lastItem = ($myobjecttosort | Sort-Object Numeric)[-1].String
Write-Host "`n排序后的最后一个值:$lastItem"

输出结果

执行后会先输出正确排序的表格:

Numeric String
------- ------
      1 Project-a1-1
      2 Project-a1-2
      5 Project-a1-5
      6 Project-a1-6
      8 Project-a1-8
     10 Project-a1-10

然后输出最后一个值:

排序后的最后一个值:Project-a1-10

关键改动说明

  • 正则调整为\d+$:专门匹配字符串末尾的连续数字,确保提取到的是每个项目的最终编号(比如Project-a1-10里的10)。
  • 用[PSCustomObject]替代New-Object PSObject:语法更简洁,性能更优。
  • 避免$myobjecttosort+=:直接将ForEach-Object的输出赋值给变量,避免数组扩容带来的性能损耗。
  • 通过索引[-1]直接获取排序后的最后一个元素:无需额外遍历,高效简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:35:52