作者sidetalker (賽托克)
看板C_Sharp
標題[問題] 奇怪的字串排序結果
時間Tue Sep 3 23:29:51 2013
我發現一個非常奇怪的結果,請務必試試看以下程式
private void button1_Click(object sender, EventArgs e) {
string[] array = new string[] {
" ' ' | !' ' -",
" ' ' | !--. *",
" ' ' | !- --.",
" - - | !' ' -",
" ' ' | !' -.~",
" ' ' | !' -.~",
" - - | !' '~-",
" ' ' | !- -- ",
" ' ' | !---- ",
" ' ' | !' ' '",
" ' ' | !--. *"
};
File.WriteAllLines("OrderBy.txt", array.OrderBy(s => s).ToArray());
List<string> list = array.ToList();
list.Sort();
File.WriteAllLines("Sort.txt", list.ToArray());
}
照理來說應該會得到
' ' | !' ' '
' ' | !' ' -
' ' | !' -.~
' ' | !' -.~
' ' | !- --
' ' | !- --.
' ' | !----
' ' | !--. *
' ' | !--. *
- - | !' ' -
- - | !' '~-
明顯顯觀察就是單引號「'」會先出現在前幾行,完了最後兩行才輪到減號「-」出現
但是我執行上面程式結果 (檔案 OrderBy.txt 和 Sort.txt 兩者內容都一樣) 卻是
' ' | !----
' ' | !' ' '
' ' | !' ' -
' ' | !- --
- - | !' ' -
' ' | !- --.
' ' | !' -.~
' ' | !' -.~
- - | !' '~-
' ' | !--. *
' ' | !--. *
沒有照字母順序排列,也看不出有什麼規則
這是怎麼一回事呢?
那麼要怎樣寫才會得到上面「照理來說」的結果?
謝謝囉
環境 Visual Studio 2010 Professional 新增 WindowsFormApplication 平台 .Net 4.0
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.248.105.190
→ Litfal:因為你沒有指定比較子,會用CurrentCulture去做排序。 09/04 01:51
→ Litfal:然後這堆字串是大家來找碴嗎......@@ 09/04 01:57
→ Litfal:說清楚一點好了,依文化特性對這些符號會有特別的權重判斷 09/04 02:07
→ Litfal:所以排起來會很奇怪。依文化特性通常是來排序有意義的語言 09/04 02:08
→ sidetalker:感謝!修改成 Sort(StringComparer.Ordinal) 或 09/04 22:09
→ sidetalker:OrderBy(s=>s, StringComparer.Ordinal) 就解決了 09/04 22:10