程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中字符串排序的問題和解決方法

C#中字符串排序的問題和解決方法

編輯:C#入門知識

先說下問題,簡單的說就是一組數據

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,如此排序就是正常的了。

------------------------------------------------------------------------------------------------------------------------------------------------------------------

以上就是在字符串排序上的遇到的問題和解決方案,不知道有沒有更好的解決方案,希望大家指出錯誤,還是小菜鳥一個。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved