首页 > 解决方案 > 为什么 CompareTo 不使用 ASCII 代码排序对我的字符串进行排序?

问题描述

在 C#中,"123-delete.json".CompareTo("123.json")计算结果为1,意思"123-delete.json"是排在 之后"123.json"

这对我来说是出乎意料的,因为根据 ASCII 表.-.

在此处输入图像描述

我试图浏览CompareToGitHub 上的实现,但似乎这个逻辑是在本机函数 ( InternalCompareString) 中实现的。

为什么该CompareTo方法不遵循 ASCII 顺序?

另外,有没有办法查看本机函数的源代码,例如InternalCompareString

标签: c#string

解决方案


利用

string.Compare("123-delete.json", "123.json", StringComparison.Ordinal)

或者

string.CompareOrdinal("123-delete.json", "123.json")

或者

StringComparer.Ordinal.Compare("123-delete.json", "123.json")

在 C# 中,字符串的比较默认情况下依赖于区域性,并StringComparison.Ordinal让函数根据二进制排序规则来比较字符串。

正如@JeppeStigNielsen 提到的,返回的对象StringComparer.Ordinal实现了接口,这使您可以在您拥有使用比较对象的字符串或任何类型的字符串“集”的IComparer<string>情况下使用这种排序顺序。SortedSet<string>SortedList<string>


推荐阅读