先說下問題,簡單的說就是一組數據
String[] data = ,,,,,,,,,
我想按照字符串排序,排序原理,我理所應當的想到是單個字符比較大小後,進行排序,但是我排序後結果是:
-03A02 101 -101 102 -102 201 -201 202 -202 301 -301 302 -302 3A01 -3A01 3A02 T3A01
首先我感覺排序順序錯了,因為按照預想的規則應該負號開頭的字符串是在一起的才對。
然後我查找資料在MSDN上看到這樣一段話:
使用字詞排序規則的操作執行一個區域敏感比較,在這個比較中可能會為非字母數字的 Unicode 字符分配特殊權重。 使用字詞排序規則和特定區域的約定,連字符(“-”)的權重可能非常小,因此“coop”和“co-op”在排序列表中是緊挨著出現的。
然後基本就明白了,在C#中“-”負號的權限因為英文本身的緣故,自動降低的權限,導致這樣的排序問題出現。
隨後我尋找了下解決方案:
在List<T>.sort方法中可以自己寫排序方法,或者實現一個類繼承IComparer這個接口,在實現的Compare中比較字符串的語句可以這樣寫:
.Compare(x, y, StringComparison.Ordinal);
第三個參數給出的解釋是“比較字符串使用序號排序規則”
如此比較“-”就不會自動被降低權限了。
還有一種可能性就是不存在這樣的sort方法給我們用,比如DataTable中,在DataTable中我選擇了這樣的方法:
String2 : IComparable, IComparable<String2> String2(= (obj == CompareTo(= obj (other ==
首先我自己聲明了一種類型,繼承了IComparable, IComparable<String2>,實現了裡面的CompareTo方法;
然後在DataTable中列的類型設定為String2,如此排序就是正常的了。
------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上就是在字符串排序上的遇到的問題和解決方案,不知道有沒有更好的解決方案,希望大家指出錯誤,還是小菜鳥一個。