在两个字符串的字符之间插入空格会修改它们的顺序

时间:2017-07-25 14:24:43

标签: c# sorting

我有2根相同长度的琴弦 我假设(可能是错误的)在每个字符串的每个字符之间插入一个空格不会改变它们的顺序。

var e1 = "12*4";  
var e2 = "12-4";  
Console.WriteLine(String.Compare(e1,e2)); // -1 (e1 < e2)

var f1 = "1 2 * 4";  
var f2 = "1 2 - 4";  
Console.WriteLine(String.Compare(f1,f2)); // +1 (f1 > f2)

如果我插入其他字符(例如_ x),则保留订单。

发生了什么?

提前致谢。

2 个答案:

答案 0 :(得分:4)

如果您使用序数比较,您将获得正确的结果。

原因是序数比较通过评估字符串对象中每个字符的数值来起作用,因此插入空格没有区别。

如果您使用其他类型的比较,则还涉及其他事项。来自文档:

  

使用单词排序规则的操作会执行区分文化的操作   比较,其中某些非字母数字Unicode字符可能   分配给他们的特殊权重。使用单词排序规则和   特定文化的惯例,连字符(“ - ”)可能有一个非常   分配给它的小重量使得“coop”和“co-op”出现在旁边   彼此在排序列表中。

     

使用序数排序规则的操作根据每个Char的数值(Unicode代码点)执行比较。   串。序数比较快但对文化不敏感。什么时候   您使用序数排序规则来排序以Unicode开头的字符串   字符(U +),字符串U + xxxx在字符串U + yyyy之前   xxxx的值在数值上小于yyyy。

答案 1 :(得分:2)

来自MSDN:

  

比较使用当前文化来获取特定于文化的信息,例如套管规则和单个字符的字母顺序。例如,文化可以指定某些字符组合被视为单个字符,或者以特定方式比较大写和小写字符,或者字符的排序顺序取决于其前面或后面的字符。 / p>      

比较字符串时,应调用Compare(String,String,StringComparison)方法,该方法要求您明确指定方法使用的字符串比较类型。

它表明存在一些文化问题,这意味着最后一个空格改变了两者的排序顺序。