2015-04-27 51 views
3

我想排序字符串(「A」,「_」,「a」)在C#中的LINQ使用ASCII順序,而忽略大小寫敏感。按照ASCII table,我感興趣的字符串是:LINQ OrderBy igorning與真正的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)); 

輸出:

OrdinalIgnoreCase:A,一,_

CurrentCultureIgnoreCase:_,A,A

InvariantCultureIgnoreCase:_, A,a

.net fiddle這裏。

如何根據ASCII排序對數組進行排序以獲取「A,_,a」?

回答

6

使用StringComparer.Ordinal ....通過使用StringComparer.OrdinalIgnoreCase您忽略了這種情況,因此可能它會默默地將所有內容都轉換爲大寫。

從MSDN:

OrdinalIgnoreCase

由OrdinalIgnoreCase屬性返回的StringComparer把字符串中的字符進行比較,就好像它們被轉換使用固定區域性的約定大寫,然後執行獨立於語言的簡單字節比較。

Ordinal

由序屬性返回的StringComparer執行簡單的字節比較是獨立的語言。正確格式化

樣品:http://ideone.com/0YTUdr

+0

就收回我的downvote,你的回答的第一個版本是使用'StringComparer.Ordinal ....'這看起來混亂,就像你的建議同樣的事情,第一線 – Habib

+0

@Habib不,我的答案是最小的,我一直在尋找一些參考。 – xanatos