Array.sort和Linq OrderBy给出不同的结果

时间:2017-01-03 18:46:33

标签: javascript c# arrays sorting

我试图用C#和javascript对数组进行排序。但我遇到的问题是排序结果都不匹配。它们的排序方式不同,例如输入数组是否有下划线。

下面的C#中的

是一个示例代码,Here是一个dotnetfiddle链接。

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var array= new string[]{"Meter_2","Meter0Add","Meter0Replace","Meter_1","ZZZ"};

        var temp= array.OrderBy(x => x).ToArray();

        foreach(string x in temp)
        {
            Console.WriteLine(x);
        }

    }
}

结果: Meter_1, Meter_2, Meter0Add, Meter0Replace, ZZZ

在下面的javascript中是一个代码示例Here是一个js小提琴链接。

var array  = ["Meter_2","Meter0Add","Meter0Replace","Meter_1","ZZZ"];
array.sort();
document.writeln(array.join(", "));

结果 Meter0Add, Meter0Replace, Meter_1, Meter_2, ZZZ

问题是如何使javascript与C#相同?

1 个答案:

答案 0 :(得分:6)

JS Array#sort有一个默认的排序顺序,并且不稳定,除非提供了compare函数。根据MDN:

  

sort()方法对数组中的元素进行排序并返回   数组。排序不一定稳定。默认排序顺序   是根据字符串Unicode代码点。

如果你使用String#localeCompare作为比较功能,你会得到相同的结果:

var array = ["Meter_2", "Meter0Add", "Meter0Replace", "Meter_1", "ZZZ"];
array.sort(function(a, b) {
  return a.localeCompare(b);
});
console.log(array.join(", "));

注意:您可以在本文中找到更多信息 - Sorting - We're Doing It Wrong