110,537
社区成员
发帖
与我相关
我的任务
分享
string s1 = "一"; // 19968
string s2 = "啊"; // 21834
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
int c0 = s1.CompareTo(s2); // -1
Thread.CurrentThread.CurrentCulture = 拼音;
int c1 = s1.CompareTo(s2); // 1
Thread.CurrentThread.CurrentCulture = 比划;
int c2 = s1.CompareTo(s2); // -1
CultureInfo 拼音 = new CultureInfo(0x804);
CultureInfo 比划 = new CultureInfo(0x20804);
string s1 = "一";
string s2 = "啊";
int c0 = string.Compare(s1, s2, StringComparison.Ordinal); // -1866
int c1 = string.Compare(s1, s2, 拼音, CompareOptions.None); // 1
int c2 = string.Compare(s1, s2, 比划, CompareOptions.None); // -1
可以看到,当采用拼音排序时,'一(yi)'比'啊(a)'大;
当采用笔画排序的时候,'一'比'啊'小;
而最快的比较就是直接哪Unicode内码比较,比如Ordinal下'一'比较小。
有趣的是,Ordinal比较直接给出了两个首字符的差距:'一'的内码为19968,'啊'的内码为21834,两者的区别正好是-1866。