簡體   English   中英

如何按字母順序對字符數組進行排序,以使同一字母的大寫和小寫版本彼此相鄰?

[英]How to sort an array of chars alphabetically so that the uppercase and the lowercase version of the same letter are next to each other?

例如

輸入數組:“ a”,“ b”,“ B”,“ A”

使用Array.Sort()輸出:'A','B','a','b'

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

我知道為什么'A'被認為比'a'低,但是我希望它按字母順序排序,而不是按相應的字符整數排序。

是否有一個Comparer類可以作為Array.Sort()的第二個參數解決問題?

是否有一個Comparer類可以作為Array.Sort()的第二個參數解決問題?

對於字符串,要使用OrdinalIgnoreCase或InvariantCultureIgnoreCase,具體取決於您是否關心區域性敏感性。 看到:

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

對於char,我不知道有一個內置的比較器可以做到這一點,但是編寫自己的比較器很容易。 看到

比較忽略字符的大小寫的正確方法是什么?

注意Array.Sort是一個變異排序; 如果要進行非變異排序,請對ToUpperToUpperInvariant進行OrderBy 請注意,這里有陷阱。 看到

如何按字母順序對字符數組進行排序,以使同一字母的大寫和小寫版本彼此相鄰?

還要注意,尚不清楚您的意圖是否是Aa 相等 -在這種情況下,由於相等的事物相等,所以AaA將是合法的排序,或者您是否仍希望在aA內進行排序。 同樣,要小心。 如果那是您想要的,那么您還必須做一個ThenBy

您可以使用LINQ以正確的順序創建新的char Array

var ans = chars.OrderBy(Char.ToUpper).ThenBy(c => c).ToArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM