c# - 为什么 CompareTo 不使用 ASCII 代码排序对我的字符串进行排序?
问题描述
在 C#中,"123-delete.json".CompareTo("123.json")
计算结果为1
,意思"123-delete.json"
是排在 之后"123.json"
。
这对我来说是出乎意料的,因为根据 ASCII 表.
在-
.
我试图浏览CompareTo
GitHub 上的实现,但似乎这个逻辑是在本机函数 ( InternalCompareString
) 中实现的。
为什么该CompareTo
方法不遵循 ASCII 顺序?
另外,有没有办法查看本机函数的源代码,例如InternalCompareString
?
解决方案
利用
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>
推荐阅读
- java - Android Studio 看不到 MainActivity
- angular - 使用 Jasmine 进行 Angular 单元测试 - 错误:请添加 @NgModule 注释
- javascript - 如何使用 javascript 将 html 文本包装成 span
- python - .replace() 应用于 pandas 中的多个列时不起作用
- r - 出了点问题;缺少所有准确度指标值:
- sql - 在 SQL 中的表或视图上添加索引
- html - 视频宽度修复和视频上的文本定位以及使文本移动响应
- file - 较大缓冲区的 C write() 吞吐量不一致
- javascript - 如何在反应中将动态属性映射到元素括号函数?
- ios - 如何在 React Native 中创建应用内购买的原生模块