.NET10:字符数字
生成式AI早期有一个测试题,就是让AI回答0.9和0.11那个大,早先的版本的AI回答0.11大,还引来大家对AI“智力”的讨论。今天,咱们说一下在不同的场景下,0.11还真比0.9大。
看这样一个实例:
foreach (string version in new[] { "v0.0.0.1", "v0.0.0.2", "v0.0.0.11" }.Order()) { Console.WriteLine(version); }
运行结果如下,它是按ASCALL的序列进行输出的:
v0.0.0.1 v0.0.0.11 v0.0.0.2
但从版本号这个角度看,应该是v0.0.0.2比v0.0.0.11小。.NET10的第一个预览版带来了解决方案:
var numericStringComparer = StringComparer.Create(CultureInfo.CurrentCulture, CompareOptions.NumericOrdering); foreach (string version in new[] { "v0.0.0.1", "v0.0.0.2", "v0.0.0.11" }.Order(numericStringComparer)) { Console.WriteLine(version); }
运行结果:
v0.0.0.1 v0.0.0.2 v0.0.0.11
另外用这个数字比较对象还可以比较如下两个数字,虽然是字符串,但比较的结果是相等。
var numericStringComparer = StringComparer.Create(CultureInfo.CurrentCulture, CompareOptions.NumericOrdering); Console.WriteLine(numericStringComparer.Equals("01008", "1008"));
再看一个在集合中的应用,在排序字典中,使用数字比较对象
var numericStringComparer = StringComparer.Create(CultureInfo.CurrentCulture, CompareOptions.NumericOrdering); var versions = new SortedDictionary<string, string>(numericStringComparer) { ["v0.0.0.11"] = "第十一个版本", ["v0.0.0.1"] = "第一个版本", ["v0.0.0.2"] = "第二个版本", }; foreach (var version in versions) { Console.WriteLine($"{version.Key} {version.Value}"); } Console.WriteLine("-----------------"); Console.WriteLine(versions["v0.0.0.02"]);
结果如下:"v0.0.0.02"与"v0.0.0.2"是相同的
v0.0.0.1 第一个版本 v0.0.0.2 第二个版本 v0.0.0.11 第十一个版本 ----------------- 第二个版本
文章来源微信公众号
想要更快更方便的了解相关知识,可以关注微信公众号
****欢迎关注我的asp.net core系统课程****
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524