[英]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
是一個變異排序; 如果要進行非變異排序,請對ToUpper
或ToUpperInvariant
進行OrderBy
。 請注意,這里有陷阱。 看到
如何按字母順序對字符數組進行排序,以使同一字母的大寫和小寫版本彼此相鄰?
還要注意,尚不清楚您的意圖是否是A
和a
相等 -在這種情況下,由於相等的事物相等,所以A
, a
, A
將是合法的排序,或者您是否仍希望在a
和A
內進行排序。 同樣,要小心。 如果那是您想要的,那么您還必須做一個ThenBy
。
您可以使用LINQ以正確的順序創建新的char
Array
:
var ans = chars.OrderBy(Char.ToUpper).ThenBy(c => c).ToArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.