[問題] 奇怪的字串排序結果

看板C_Sharp (C#)作者 (賽托克)時間12年前 (2013/09/03 23:29), 編輯推噓0(006)
留言6則, 2人參與, 最新討論串1/1
我發現一個非常奇怪的結果,請務必試試看以下程式 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

09/04 01:51, , 1F
因為你沒有指定比較子,會用CurrentCulture去做排序。
09/04 01:51, 1F

09/04 01:57, , 2F
然後這堆字串是大家來找碴嗎......@@
09/04 01:57, 2F

09/04 02:07, , 3F
說清楚一點好了,依文化特性對這些符號會有特別的權重判斷
09/04 02:07, 3F

09/04 02:08, , 4F
所以排起來會很奇怪。依文化特性通常是來排序有意義的語言
09/04 02:08, 4F

09/04 22:09, , 5F
感謝!修改成 Sort(StringComparer.Ordinal) 或
09/04 22:09, 5F

09/04 22:10, , 6F
OrderBy(s=>s, StringComparer.Ordinal) 就解決了
09/04 22:10, 6F
文章代碼(AID): #1I9W1ocC (C_Sharp)
文章代碼(AID): #1I9W1ocC (C_Sharp)