【发布时间】:2014-08-16 00:02:09
【问题描述】:
我认为在 .NET 中,字符串是按字母顺序比较的,并且是从左到右比较的。
string[] strings = { "-1", "1", "1Foo", "-1Foo" };
Array.Sort(strings);
Console.WriteLine(string.Join(",", strings));
我希望这是(或两者都以负号开头):
1,1Foo,-1,-1Foo
但结果是:
1,-1,1Foo,-1Foo
这似乎是一种混合,要么忽略减号,要么比较多个字符,即使第一个字符已经不同。
编辑:我现在测试了OrdinalIgnoreCase,得到了预期的顺序:
Array.Sort(strings, StringComparer.OrdinalIgnoreCase);
但即使我使用InvariantCultureIgnoreCase,我也会得到意外的订单。
【问题讨论】:
-
“-”在字母表中的哪个位置?可能与连字符的单词不要在字典中更改它们的顺序有关
-
试试这个
string.Compare("1", "-1Foo", StringComparison.InvariantCultureIgnoreCase)和这个string.Compare("-1", "1Foo", StringComparison.InvariantCultureIgnoreCase)。两次都会得到 -1。 -
他可能使用
de-DE文化作为当前的文化。 -
这不是特定于文化的,这对于 .NET 中的所有文化都是一样的。
-
你应该使用
StringComparer.Ordinal。
标签: c# .net string sorting .net-4.0