生成的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の第1プレビュー版では、この問題を解決する方法が提供されました:
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
さらに、この数値比較オブジェクトを使えば、以下の2つの数値を比較することもできます。これらは文字列ですが、比較した結果は等しいです。
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 第十一个版本
-----------------
第二个版本
(Translated by GPT)
元のリンク:https://mp.weixin.qq.com/s/dt1Aiq-74F5XhS9J_FUmUw?token=1135395277&lang=zh_CN&wt.mc_id=MVP_325642