Fork me on GitHub

.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 第十一个版本
-----------------
第二个版本

  文章来源微信公众号

  想要更快更方便的了解相关知识,可以关注微信公众号 

posted @ 2025-03-10 19:45  桂素伟  阅读(48)  评论(0)    收藏  举报