2015-12-10 54 views
1

我有一個字符串元素的一些列表看起來像這樣:排序字符串格式日期的列表

{ Week 2.2012, Week 45.2014, Week 12.2011, ...} 
{ Half 1.2013, Half 2.2015, Half 1.2010 ...} 
{ Quarter 3.2005, Quarter 4.2010, Quarter 2.2011, ...} 

知道這些字符串值不能被解析爲日期時間,我怎麼能對列表排序(?) ?

預期結果:

{ Week 12.2011, Week 2.2012, Week 45.2014, ...} 
{ Half 1.2010, Half 1.2013, Half 2.2015, ...} 
{ Quarter 3.2005, Quarter 4.2010, Quarter 2.2011, ...} 
+0

排序列表是什麼樣的? – Haris

+0

類似這樣的內容:{12.2011周,2.2012周,45.2014周,...},{1.20一半,1.2013一半,2.2015一半,...},{2005年三季度,4.2010,2011年二季度,......} – Mahdi

+4

所以排序是每個列表_,他們從來沒有合併?在問題中明確表達(呃)。在那裏添加預期的輸出。 –

回答

3

使用自定義邏輯創建的IComparer的實現,並把它傳遞給List.Sort方法。

0

對於這個解決方案,我想創建一個返回日期的日期字符串分析器。下一步你可以使用按日期時間排序Tuple列表。

0

正如Andy說,你可以將這些數據通過使用LINQ排序:

var sorted = list.Select(x => x.Split(' ', '.')) 
    .OrderBy(x => int.Parse(x[2])).ThenBy(x => int.Parse(x[1])) 
    .Select(x => $"{x[0]} {x[1]}.{x[2]}") //or string.Format("{0} {1}.{2}", x[0], x[1], x[2]) 
    .ToList(); 
+0

我解析它們以確保格式正確。 @Sinatr – dotctor

0

事實上,它看起來像這些字符串可以被解析爲DateTime

至於我能理解:

Week 2.2012是 「第二週的2012」= 15 2012年1月

Half 2.2015是 「半年的2015」= 1 2015年(不太有「半肯定七月「雖然 - 它可以有略微不同的含義)

Quarter 3.2005是 」2005年第三季度「= 2005

等10月1日。

因此,您可以解析這些值,將它們轉換爲DateTime並對列表進行排序。