首页 > 解决方案 > 如何按字母顺序对字符数组进行排序,以使同一字母的大写和小写版本彼此相邻?

问题描述

例如

输入数组:'a'、'b'、'B'、'A'

使用 Array.Sort() 输出:'A'、'B'、'a'、'b'

所需的输出:'A','a','B','b'

我理解为什么'A'被认为低于'a',但我希望它按字母顺序排序,而不是按字符的相应整数排序。

是否有一个 Comparer 类可以作为 Array.Sort() 的第二个参数来解决问题?

标签: c#arrayssorting

解决方案


是否有一个 Comparer 类可以作为 Array.Sort() 的第二个参数来解决问题?

对于字符串,您希望使用 OrdinalIgnoreCase 或 InvariantCultureIgnoreCase,具体取决于您是否关心文化敏感性。看:

通常最好使用哪个 - StringComparison.OrdinalIgnoreCase 或 StringComparison.InvariantCultureIgnoreCase?

对于字符,我不知道有一个内置的比较器可以做到这一点,但很容易编写你自己的。看

比较 char 忽略大小写的正确方法是什么?

请注意,这Array.Sort是一种变异排序;如果您想要非变异排序,请执行OrderByon ToUpperor ToUpperInvariant。请注意,这里有陷阱;看

如何按字母顺序对字符数组进行排序,以使同一字母的大写和小写版本彼此相邻?

另请注意,尚不清楚您的意图是否是Aanda平等的——在这种情况下Aa,A将是一个合法的排序,因为相等的事物是平等的,或者您是否仍然想要在 and 内的a排序A。再次,要小心。如果这就是你想要的,那么你也必须这样做ThenBy


推荐阅读