【发布时间】:2011-07-04 15:57:49
【问题描述】:
这更像是一个“你能解释一下这个”类型的问题,而不是其他任何问题。
我在工作中遇到了一个问题,我们在表格中使用 NaN 值,但是当对表格进行排序时,它以一种非常奇怪的方式出现。我认为 NaN 搞砸了,所以我写了一个测试应用程序来看看这是否属实。这就是我所做的。
static void Main(string[] args)
{
double[] someArray = { 4.0, 2.0, double.NaN, 1.0, 5.0, 3.0, double.NaN, 10.0, 9.0, 8.0 };
foreach (double db in someArray)
{
Console.WriteLine(db);
}
Array.Sort(someArray);
Console.WriteLine("\n\n");
foreach (double db in someArray)
{
Console.WriteLine(db);
}
Console.ReadLine();
}
结果如下:
之前:
4,2,NaN,1,5,3,NaN,10,9,8
之后:
1,4,NaN,2,3,5,8,9,10,NaN
所以是的,NaN 是如何使排序后的数组以一种奇怪的方式排序的。
引用弗莱的话; “为什么是那些东西?”
【问题讨论】:
-
我将您的代码复制/粘贴到我的 Visual Studio 中并运行它,它的排序如下:NaN,NaN,1,2,3,4,5,8,9,10。这是.Net 4。当我切换到.Net 3.5SP1时,它的排序就像你说的那样。
-
@pst:如果预期会这样,为什么要改变它? :-)
-
有关如何弄乱快速排序的其他想法,请参阅我最近关于该主题的系列文章。第一部分在这里:blogs.msdn.com/b/ericlippert/archive/2011/01/20/…
-
@Agent 我在这里问了这个问题:stackoverflow.com/q/5123886/138757 希望有人知道。
-
@Steven 经过深入研究,我同意这是 .NET35 中的一个错误(至少在文档中):-)