Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell排序数组_Powershell - Fatal编程技术网

PowerShell排序数组

PowerShell排序数组,powershell,Powershell,我的阵法是吐出这个 a10 a11 a12 a6 a7 a8 a9 任何简短/简单的代码来修复它: a6 a7 a8 a9 a10 a11 a12 在这种情况下,最简单的方法是将所有数字归零,并将其用于排序: $a | sort { [Regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(10, '0') }) } 您可以按表达式排序,将第一个字母后的所有内容转换为整数: $array | sort { [int]$_

我的阵法是吐出这个

a10
a11
a12
a6
a7
a8
a9
任何简短/简单的代码来修复它:

a6
a7
a8
a9
a10
a11
a12

在这种情况下,最简单的方法是将所有数字归零,并将其用于排序:

$a | sort {
  [Regex]::Replace($_, '\d+', 
  {
    $args[0].Value.PadLeft(10, '0')
  })
}

您可以按表达式排序,将第一个字母后的所有内容转换为整数:

$array | sort { [int]$_.substring(1)}
您还可以通过删除任何非数字字符使解决方案更通用:

$array | sort { [int]($_ -replace '\D')}

这些是十六进制值,对吗?;-)


@Joey$a | sort{$_-replace'\d+',$..padleft(10,'0')}是好的吗?或者这样有什么问题?有<代码>$\u指的是完整的项目,而不是您案例中的匹配项。因此,结果不是
a000000001
,而是
a0000000a1
。它可能不再适用于字符串中的多个数字,尽管我现在太累了,无法尝试。上面的解决方案应该会产生一个»自然«排序,其中几乎包含任何包含数字的字符串列表。您的第二行“$array | sort{[int]($|-replace'\D')}”能够修复填充了“2012-03-02_log-X.txt”的数组。非常感谢。仅供参考:如果您只有一个字符串数组(智能编号是一个问题),那么您只需要
$array | sort
$array | sort {[convert]::toint32("$_",16)}