2016-10-06 14 views
2

シーケンシャル文字列で配列を作成するために、次のコードを書いています。 それは私が期待するように動作しますが、私はそれがより速く走ったことを望みます。 PowerShellで目的の結果を生成するための効率的な方法はありますか?シーケンシャル文字列を配列に素早く構築する

私はPowerShellの新機能で、指導に感謝します。 $ARRAY

$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. 

例:

AA000001 
AA000002 
... 
AA019999 
AA020000 
+0

アレイの連結は、毎回配列を再作成する際にループ内で使用しないでください。 – wOxxOm

答えて

2

次のワンライナーは、0.4911672秒(あなたの例12.9638944 seonds)をtooked。結果は同じです。

$MIN = 1 
$MAX = 20000 
$PREFIX = "AA" 

$ARRAY = $MIN .. $MAX | % { "$PREFIX{0:D6}" -f $_ } 

あなたは、さらに(ということに言及してくれてありがとう4c74356b41)whileループを使用してパフォーマンスをimprooveすることができます:それは6桁の数字があることを確認し、ちょうど配列に結果を格納するために小数指定子と書式文字列を使用しています

# .... 
$array = while ($MIN -le $MAX) 
{ 
    "$PREFIX{0:D6}" -f $MIN++ 
} 

これは私のコンピュータ上で0.0970327秒を要しました。

+0

おもしろいことは、私は完全に壊れたコードを投稿しました。(おかげで):) – 4c74356b41

+0

ええ、あなたはwhileループでそのことを言いました。 range演算子の結果をforeach-objectコマンドレットにパイプするのはとても魅力的ですが、明らかにパフォーマンスが悪いので魅力的です... –

関連する問題