gpt4 book ai didi

c# - 为什么 CompareTo 不使用 ASCII 代码排序对我的字符串进行排序?

转载 作者:太空狗 更新时间:2023-10-29 21:48:22 29 4
gpt4 key购买 nike

在 C# 中,"123-delete.json".CompareTo("123.json") 的计算结果为 1,表示 "123-delete.json" 将排在 "123.json" 之后。

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

enter image description here

我试图浏览 GitHub 上的 CompareTo 实现,但似乎这个逻辑是在 native 函数 (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>或任何一种使用比较对象的字符串“集”。

关于c# - 为什么 CompareTo 不使用 ASCII 代码排序对我的字符串进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57570327/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com