首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >关于string.compare方法

关于string.compare方法
EN

Stack Overflow用户
提问于 2012-03-13 01:39:22
回答 3查看 391关注 0票数 3

一个奇怪的问题,我的代码是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static void Main(string[] args)
{
    Console.WriteLine(string.Compare("-", "a"));//output -1
    Console.WriteLine(string.Compare("-d", "a"));//output 1
    Console.Read();
}

谁能告诉我为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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é”放在按顺序排序的列表中,这在上下文中可能没有意义,对于非英语使用者来说更是如此。

票数 4
EN

Stack Overflow用户

发布于 2012-03-13 01:42:03

它将字符在彼此中的位置进行比较。换句话说,"-“在"a”之前(小于)。

String.Compare()在比较时使用word排序规则。请注意,这些都是相对位置。以下是来自MSDN的一些信息。

ValueCondition Negative : strA小于strB

0: strA等于strB

正: strA大于strB

以上比较适用于此重载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static int Compare(
    string strA,
    string strB
)
票数 3
EN

Stack Overflow用户

发布于 2012-03-13 01:44:36

在.NET框架的排序中,-被视为一个特例。这个答案包含了详细信息:https://stackoverflow.com/a/9355086/1180433

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9677238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文