2014-01-25 28 views
2

我有一個字符串,像這樣排序兩個條件

May#01 
April#02 
Jan#03 

我需要排序這個首字母順序排列,然後通過數值旁邊#數組的字符串基於陣列。 按字母順序排序很明顯,但我似乎沒有得到數字部分。

回答

1
var input = new[] { "May#01", "April#02", "Jan#03", "Jan#02", "Jan#1" }; 
    var result = input.OrderBy(s => s.Split('#')[0]) 
     .ThenBy(s => Int32.Parse(s.Split('#')[1])); 

結果:

然後由整數值是#字符後過濾作爲揚#02到來之前1月1日#

[ 
"April#02", 
"Jan#02", 
"Jan#03", 
"Jan#1", 
"May#01" 
] 

這我假設是不正確的:3210

[ 
"April#02", 
"Jan#1", 
"Jan#02", 
"Jan#03", 
"May#01" 
] 

對方回答時會產生輸出。

您可以通過執行一次拆分並將這兩個部分與原始字符串一起存儲在一個匿名類中,使我的代碼更高效,但我不想卷積代碼。

+0

是的工作,謝謝伊恩,最後一件事我如何獲得所有月份作爲逗號分隔字符串作爲最後一個字符串。 – Codehelp

+0

@Codehelp你可以使用相同的'Split'方法,以及'Select'和'string.Join' –

5

它們的值的一階字符串(這會給你字母排序)。

array.OrderBy(s => s) 
    .ThenBy(s => Int32.Parse(s.Split('#')[1])) 

樣品::

string[] array = { "May#01", "April#02", "Jan#03", "April#01" }; 
var query = array.OrderBy(s => s) 
       .ThenBy(s => Int32.Parse(s.Split('#')[1])); 

結果:

"April#01" 
"April#02" 
"Jan#03" 
"May#01"