2012-03-01 9 views
4

私の配列はこれを吐き出しています。PowerShellソートアレイ

a10 
a11 
a12 
a6 
a7 
a8 
a9 

にそれを修正するために、任意のショート/簡単なコード:

a6 
a7 
a8 
a9 
a10 
a11 
a12 

答えて

10

式でソートし、最初の文字の後ろのすべてを取り出し、整数にキャストすることができます。

$array | sort { [int]$_.substring(1)} 

また、任意の数字以外の文字を削除することによって解決策は、より汎用的にすることができます。

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

2行目の "$ array | sort {[int]($ _ -replace '\ D')}"は "2012-03-02_log-X.txt"で埋め尽くされた配列を修正できました。ありがとうございました! –

+0

FYI:文字列の配列を持っていて(スマート番号が問題になる)、必要なのは '$ array |ソート ' – JoeBrockhaus

5

この場合、最も簡単な方法は、ゼロ・パッドにすべての数字ことと、ソートのためにそれを使用します。

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

私はあなたの評判がとても高く、優れた答えを持っている理由を知ります。 –

+1

@Joey $ a | sort {$ _ -place '\ d +'、$ _。padleft(10、 '0')}は同じですか?またはこの方法で何か問題がありますか? –

+0

あります。 '$ _'は完全な項目を指し、あなたの場合は一致しません。したがって、結果は 'a0000000001'ではなく' a00000000a1'です。おそらく文字列の中で複数の数字を扱うのをやめてしまうでしょうが、私は試しにあまりにも疲れています。上記の解は、数値を含む文字列のほぼすべてのリストを持つ自然なソートを生成するはずです。 – Joey

2

これらは進値、右? ;-)