2016-12-31 121 views
1

我不知道如何按字母順序排序字符串數組,然後按數字組合。下面是示例:如何按字母順序排序字符串數組然後按數字組合排序?

$a = @('aa101','aa11','ab10','ab9','a111','a22','a01') 

我想看到的排序如下之後的結果:

a01 
a22 
a111 
aa11 
aa101 
ab9 
ab10

請幫我找出使用PowerShell腳本的答案。

+1

排序算法你描述(按首字母排序,然後數),會產生不同的結果,你的榜樣 –

+0

嗨,馬蒂亞斯,會是什麼結果,可請解釋? –

+0

按照第一個字母對這些值進行排序對您描述的集合(它們都以'a'開頭)進行排序,按數字排序,您將首先獲得'a01'('01'爲'1',最小的數字爲那麼'ab9'(9是次小),然後是'ab10'等。 –

回答

3

Sort-Object cmdlet可以將一個或多個腳本塊作爲其Property參數。第一個參數應在最後刪除所有的數字,然後刪除所有非數字和強制轉換爲整數:

$a |Sort-Object {"$_" -replace '\d',''},{("$_" -replace '\D','') -as [int]} 
  • \d是數字的正則表達式
  • \D是什麼的正則表達式位數
+0

YES!非常感謝你,Mathias!我沒有意識到sort-object可以用逗號分隔兩個表達式。 我簡化了一些以節省一些打字。 $ a | Sort-Object {「$ _」-replace'\ d'},{[int](「$ _」-replace'\ D')} –

+0

@LiangCui如果需要,還可以組合表達式和屬性名稱:'$ a | Sort-Object Length,{[int](「$ _」 - 替換'\ D','')}' –

+0

是的。謝謝! –