相关疑难解决方法(0)

用NaN对双打数组进行排序

这更像是一个"你能解释这个"类型的问题,而不是其他任何问题.

我在工作中遇到了一个问题,我们在表中使用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有些如何使排序的数组以奇怪的方式排序.

引用弗莱; "为什么这些东西?"

c# sorting nan .net-3.5

14
推荐指数
2
解决办法
3073
查看次数

.NET 3.5和.NET 4.0之间的排序差异

在对集合进行排序时,我遇到了一个非常奇怪的.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)

.net c# .net-4.0 .net-4.5

9
推荐指数
1
解决办法
1716
查看次数

标签 统计

c# ×2

.net ×1

.net-3.5 ×1

.net-4.0 ×1

.net-4.5 ×1

nan ×1

sorting ×1