一个奇怪的问题,我的代码是:
static void Main(string[] args)
{
Console.WriteLine(string.Compare("-", "a"));//output -1
Console.WriteLine(string.Compare("-d", "a"));//output 1
Console.Read();
}
谁能告诉我为什么?
发布于 2012-03-13 01:50:48
默认情况下,字符串比较使用特定于区域性的设置。这些设置允许对字母和符号应用不同的顺序和权重;例如,在使用大多数区域性设置进行排序时,“简历”和"résumé“看起来彼此非常接近,因为"é”的排序紧跟在"e“之后,远远早于"f",即使Unicode代码页将é放在英语字母表的其余部分之后。同样,不是空格的符号在字符串中占据一个位置,但被认为是“连接”的符号,如破折号、斜杠等,被赋予较低的“权重”,因此它们只被视为平局决胜局。这意味着"a-b“将紧跟在"ab”之后、"ac“之前进行排序,因为破折号不如字母重要。
您认为需要的是“序数排序”,即根据字符串中的第一个差异,基于Unicode代码页中不同字符的相对序号位置对字符串进行排序。这将把"-d“放在"a”if之前,"-“也会放在"a”之前,因为破折号被认为是一个完整的“字符”,并与相同位置上的字符"a“进行比较。然而,在一个真正的单词列表中,这会将单词"redo“、"resume”、"rosin“、"ruble”、"re-do“和"résumé”放在按顺序排序的列表中,这在上下文中可能没有意义,对于非英语使用者来说更是如此。
发布于 2012-03-13 01:42:03
它将字符在彼此中的位置进行比较。换句话说,"-“在"a”之前(小于)。
String.Compare()
在比较时使用word排序规则。请注意,这些都是相对位置。以下是来自MSDN的一些信息。
Value:Condition Negative : strA小于strB
0: strA等于strB
正: strA大于strB
以上比较适用于此重载:
public static int Compare(
string strA,
string strB
)
发布于 2012-03-13 01:44:36
在.NET框架的排序中,-被视为一个特例。这个答案包含了详细信息:https://stackoverflow.com/a/9355086/1180433
https://stackoverflow.com/questions/9677238
复制相似问题