LINQ OrderBy具有真正ASCII排序的igorning案例

Nin*_*ner 6 .net c# linq sorting ascii

我正在尝试使用C#中的LINQ以ASCII顺序对字符串("A","_","a")进行排序,同时忽略区分大小写.根据ASCII表,我感兴趣的字符串是:

  • A = 65
  • _ = 95
  • a = 97

所以我希望输出是

A,_,a

但是我尝试了所有的StringComparer变体,它们都没有给我想要的输出.以下是我的测试程序和输​​出:

    string[] words = { "A", "_", "a" };

    var sortedWords = words.OrderBy(a => a, StringComparer.OrdinalIgnoreCase);
    Console.WriteLine("OrdinalIgnoreCase: " + string.Join(", ", sortedWords));

    sortedWords = words.OrderBy(a => a, StringComparer.CurrentCultureIgnoreCase);
    Console.WriteLine("CurrentCultureIgnoreCase: " + string.Join(", ", sortedWords));

    sortedWords = words.OrderBy(a => a, StringComparer.InvariantCultureIgnoreCase);
    Console.WriteLine("InvariantCultureIgnoreCase: " + string.Join(", ", sortedWords));
Run Code Online (Sandbox Code Playgroud)

输出:

OrdinalIgnoreCase:A,a,_

CurrentCultureIgnoreCase:_,A,a

InvariantCultureIgnoreCase:_,A,a

.net在这里小提琴.

如何根据ASCII排序对数组进行排序以获得"A,_,a"?

xan*_*tos 9

使用StringComparer.Ordinal....通过使用StringComparer.OrdinalIgnoreCase你忽略了这种情况,所以可能它默默地将所有东西都转换为大写.

来自MSDN:

OrdinalIgnoreCase:

OrdinalIgnoreCase属性返回的StringComparer将字符串中的字符进行比较,就像使用不变文化的约定将它们转换为大写一样,然后执行独立于语言的简单字节比较.

序数:

Ordinal属性返回的StringComparer执行与语言无关的简单字节比较.

样本格式正确:http://ideone.com/0YTUdr