我编写了以下代码来构建一个包含顺序字符串的数组。 它像我期望的那样工作,但我希望它能更快地运行。有没有更有效的方法在PowerShell中产生我想要的结果?
我是PowerShell的新手,非常感谢您的指导。
$MIN = 1
$MAX = 20000
$ARRAY = @()
$PREFIX = "AA"
$startDTM = (Get-Date) # Start time
FOR ($i=$MIN; $i -le $MAX; $i++)
{
If ($i -gt 0 -and $i -lt 10) {
$ARRAY = $ARRAY + ($PREFIX+"00000"+$i)
}
If ($i -gt 9 -and $i -lt 100) {
$ARRAY = $ARRAY + ($PREFIX+"0000"+$i)
}
If ($i -gt 99 -and $i -lt 1000) {
$ARRAY = $ARRAY + ($PREFIX+"000"+$i)
}
If ($i -gt 999 -and $i -lt 10000) {
$ARRAY = $ARRAY + ($PREFIX+"00"+$i)
}
If ($i -gt 9999 -and $i -lt 100000) {
$ARRAY = $ARRAY + ($PREFIX+"0"+$i)
}
If ($i -gt 99999 -and $i -lt 1000000) {
$ARRAY = $ARRAY + ($PREFIX+$i)
}
}
$endDTM = (Get-Date) #End Time
"Elapsed Time: $(($endDTM-$startDTM).totalseconds) seconds"
$ARRAY.count #How many loaded.
$ARRAY
的示例:
AA000001
AA000002
...
AA019999
AA020000
答案 0 :(得分:2)
以下单行内容 0.4911672 秒(您的示例 12.9638944 seonds)。结果是一样的。它使用带有十进制说明符的格式字符串来确保有6位数字并将结果存储在数组中:
$MIN = 1
$MAX = 20000
$PREFIX = "AA"
$ARRAY = $MIN .. $MAX | % { "$PREFIX{0:D6}" -f $_ }
您可以使用while循环进一步提高性能(感谢4c74356b41提及):
# ....
$array = while ($MIN -le $MAX)
{
"$PREFIX{0:D6}" -f $MIN++
}
这在我的计算机上花了 0.0970327 秒。