2012-03-01 122 views

回答

10

您可以通過表達排序,第一個字母后,採取一切,它轉換爲整數:

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

您也可以讓解決方案更加通用的通過移除任何非數字字符:

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

你的第二行「$ array | sort {[int]($ _ -replace'\ D')}」能夠修復填充了「2012-03-02_log-X.txt」的數組。謝謝! – 2012-03-02 13:35:24

+0

供參考:如果你只是有一個字符串數組(和智能編號是一個問題),所有你需要的是'$ array | sort' – JoeBrockhaus 2015-08-31 17:52:28

5

最簡單的方法在這種情況下將是零墊的所有號碼,並利用它來進行排序:

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

我明白爲什麼你有你的聲望如此之高,優秀的回答 – 2012-03-01 15:33:41

+1

@Joey $ a |排序{$ _ -replace'\ d +',$ _。padleft(10,'0')}是否一樣好?或者這種方式有什麼問題? – 2012-03-01 16:08:07

+0

有。 '$ _'指的是完整的項目,而不是你的情況。因此結果不是'a0000000001',而是'a00000000a1'。它可能停止在字符串中使用多個數字,儘管現在我太累了,無法嘗試。上面的解決方案應該產生一個「自然」排序,幾乎包含任何包含數字的字符串列表。 – Joey 2012-03-02 00:32:30

2

這是十六進制值,對不對? ;-)

$array | sort {[convert]::toint32("$_",16)}