Array.Sort()不使用不区分大小写的比较器保留元素顺序

时间:2015-10-05 19:24:49

标签: c# sorting ignore-case

我正在使用Array.Sort()代码中显示的参数。我无法获得以下数组所需的订单

jONeS
jones
joNes
jones
aDaMs
adams
adaMS
ADAMs

显示的程序打印以下内容

adams
aDaMs
adaMS
ADAMs
jONeS
jones
joNes
jones

根据我的说法,应该打印以下订单

aDaMs
adams
adaMS
ADAMs
jONeS
jones
joNes
jones

请注意前两个元素显示错误。 我哪里错了?

int N = Convert.ToInt32(Console.ReadLine());
string[] arr=new string[N];
for (int i = 0; i < N; ++i)
    arr[i] = Console.ReadLine();
Array.Sort(arr, StringComparer.Create(new CultureInfo("en-US"),true));
Console.WriteLine();
for (int i = 0; i < N; ++i)
    Console.WriteLine(arr[i]);

1 个答案:

答案 0 :(得分:3)

正如Jeroen Mostert所说Array.Sort不稳定(reference)但LINQ中的OrderBy稳定(reference)你可以使用它。

所以替换

Array.Sort(arr, StringComparer.Create(new CultureInfo("en-US"),true));

arr = arr.OrderBy(name=>name, StringComparer.Create(new CultureInfo("en-US"),true)).ToArray();