java - C# Sort 与 Java Collections.Sort 给出不同的结果

标签 java c# sorting collections

C# 代码:

public class Test
{
    public static void Main()
    {
        List<string> list = new List<string> { "johnsmith@mail.com", "john_newyork@mail.com", "john00@mail.com" };
        list.Sort();
        for(int i=0;i<list.Count;i++){
            Console.WriteLine(list[i]);
        }

    }
}

结果:

john_newyork@mail.com

john00@mail.com

johnsmith@mail.com

Java 代码:

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        List<String> list = new ArrayList<String>();
        list.add("johnsmith@mail.com");
        list.add("john_newyork@mail.com");
        list.add("john00@mail.com");
        Collections.sort(list);
        System.out.println(list);
    }
}

结果:

[john00@mail.com、john_newyork@mail.com、johnsmith@mail.com]

“_”的 Ascii 值为 95,“0”的 Ascii 值为 48。因此,在字符串排序中,理想情况下“0”应位于“_”之前。为什么 C# 排序将“_”放在“0”之前?

但是当我尝试比较字符“_”和“0”时。两种语言都可以正确比较,并在“_”之前保留“0”。

Console.WriteLine('0'>'_'); -> False (C#)
System.out.println('0'>'_'); -> false (Java)

最佳答案

要按 ASCII 值排序,请使用 StringComparer.Ordinal

list.Sort(StringComparer.Ordinal);

关于java - C# Sort 与 Java Collections.Sort 给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59015922/

相关文章:

java - 在java日志格式化程序中使用简单的类名

c# - 订购 linq 查询

algorithm - Big-O 计算资源

java - PDF 字节数组到 Android 应用程序中的 pdf 文件显示

Java 到 Mongo 文档日期

java - 安装后按钮不会显示在应用程序中

c# - ASP.NET MVC F# Controller 操作忽略参数

c# - 如何序列化 NHibernate 映射对象的所有属性?

sorting - Swift 返回将对数组进行排序的索引(类似于 numpy argsort)

python - jinja 2 中列表的元素随机化