Nin*_*ner 6 .net c# linq sorting ascii
我正在尝试使用C#中的LINQ以ASCII顺序对字符串("A","_","a")进行排序,同时忽略区分大小写.根据ASCII表,我感兴趣的字符串是:
所以我希望输出是
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
如何根据ASCII排序对数组进行排序以获得"A,_,a"?
使用StringComparer.Ordinal....通过使用StringComparer.OrdinalIgnoreCase你忽略了这种情况,所以可能它默默地将所有东西都转换为大写.
来自MSDN:
OrdinalIgnoreCase属性返回的StringComparer将字符串中的字符进行比较,就像使用不变文化的约定将它们转换为大写一样,然后执行独立于语言的简单字节比较.
和
序数:
Ordinal属性返回的StringComparer执行与语言无关的简单字节比较.
样本格式正确:http://ideone.com/0YTUdr