2011-04-07 121 views
2

根據自定義字母順序,.NET/C#中有一種方法可以對List<string>進行排序嗎?自定義整理順序

我有一個單詞列表:

{ "badum", "śiram", "ðaur", "hor", "áltar", "aun" } 

,我希望按以下順序進行排序:

{ "áltar", "aun", "badum", "śiram", "hor", "ðaur" } 

通過自定義的字母順序,我的意思是我工作的一個constructed language字母看起來像這樣:ABZTMIGJLNKSOŚPRFUHDVEÐÞY。在Java中找到的RuleBasedCollator的C#實現將是完美的!如果沒有這樣的東西存在,那麼在寫一個自定義算法的幾個指針將不勝感激。

預先感謝您。

+0

我認爲編寫一個自定義的'StringComparer'是你最好的選擇。 – 2011-04-07 13:28:08

回答

3

我肯定會開始創建一個RuleBasedCollat​​or。弄清楚你想要的規則是更困難的任務之一。

有一個項目提供了.net bindings over icu這可能適合你。

如果這不符合您的要求,並且您決定自己寫,Unicode Collation Algorithm是一個很好的資源。請記住,從概念上講,自然語言排序(儘管許多優化是可能的)涉及單獨的傳遞,具有越來越高的特異性。如果沒有差異並且兩個字符串中的主要單位數相同,則第一遍將查找所謂的主要區別(通常忽略大小寫和某些變音符號和標點符號的差異),然後您可以進行第二次傳遞,即考慮到變音區別的時間,如果有的話。接下來,您將處理案例區分以及標點區分。

+0

謝謝。您發佈的鏈接非常有用! – Minustar 2011-04-11 06:38:42

2

你可以通過自定義的分揀機的List.Sort()方法:

List<string> foo = new List<string>(); 
foo.Sort((a, b) => a.CompareTo(b)); 

這將到位取決於您要使用的標準列表進行排序(上面顯然不只是一個普通的字符串比較)。