这更像是一个"你能解释这个"类型的问题,而不是其他任何问题.
我在工作中遇到了一个问题,我们在表中使用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();
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
之前:
4,2,NaN,1,5,3,NaN,10,9,8
Run Code Online (Sandbox Code Playgroud)
后:
1,4,NaN,2,3,5,8,9,10,NaN
Run Code Online (Sandbox Code Playgroud)
所以是的,NaN有些如何使排序的数组以奇怪的方式排序.
引用弗莱; "为什么这些东西?"
在对集合进行排序时,我遇到了一个非常奇怪的.NET框架行为.这种行为在.NET 3.5和4.0之间是不同的(但我想我知道为什么),但更重要的是(这是我真正关心的),在同一框架上的不同机器上的行为是不同的.
我正在开发一种依赖某些第三方软件的软件(在这种情况下是spring.net,但这并不重要),并且在某些时候,它正在整理一个集所有项目"相等"的集合(比较器总是返回0).这不在我的控制之下,如果排序该列表的行为始终一致,我会很好.不是.
在.NET 3.5中创建一个简单的项目,然后运行下面的代码.当在3.5中编译时,行为似乎是一致的,并且集合将被"反转"(它出现为Three,Two,One).现在,请将项目目标更改为.NET 4(而不是4.5),然后再次运行:在我的计算机上,它不再反转集合(一,二,三),但在其他同事机器上,它确实(三二一)!!!我们有完全相同的设置......
你可以告诉我,在你的机器上,4.0以下,它是什么?反转还是不反转?
我正在尝试评估我的设置是否正确.
class Program
{
static void Main()
{
var collection = new ArrayList
{
"One",
"Two",
"Three",
};
// It should in any case write One, Two, Three
Console.Out.WriteLine("Before sort: ");
foreach (string item in collection)
{
Console.Out.WriteLine("\t"+item);
}
collection.Sort(new OrderComparator());
// In .NET 3.5, it will write Three, Two, One
// In .NET 4, it will …Run Code Online (Sandbox Code Playgroud)