作者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
1F:→ Litfal:因为你没有指定比较子,会用CurrentCulture去做排序。 09/04 01:51
2F:→ Litfal:然後这堆字串是大家来找碴吗......@@ 09/04 01:57
3F:→ Litfal:说清楚一点好了,依文化特性对这些符号会有特别的权重判断 09/04 02:07
4F:→ Litfal:所以排起来会很奇怪。依文化特性通常是来排序有意义的语言 09/04 02:08
5F:→ sidetalker:感谢!修改成 Sort(StringComparer.Ordinal) 或 09/04 22:09
6F:→ sidetalker:OrderBy(s=>s, StringComparer.Ordinal) 就解决了 09/04 22:10