2014-02-07 38 views
0

我有一個很好的訂單ID列表,後面跟着一個csv文件(OID,SN)中的序列號。我需要按序號對列表進行排序,並使用base58,所以大寫字母在小寫之前。按第二列重新排序csv,區分大小寫

Base58:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

只是做它按字母順序,但不是在Base58爲了

IEnumerable<string> query = 
    from line in serialNumbers 
    let x = line.split(',') 
    orderby x[1] 
    select x[0] + "," + x[1]; 

string[] temp = query.ToArray(); 

訂單。我將如何實現這一目標?使用C#。

+0

檢查此鏈接 - [SQL訂購](http://code.msdn.microsoft.com/SQL-Ordering-Operators-050af19e)。請參閱** OrderBy - Comparer **部分。這可能會給你一些提示。 –

回答

0

您可以定義自定義比較器,例如:

class Base58Comparer : IComparer<string> 
    { 
     public int Compare(string x, string y) 
     { 
      if (object.ReferenceEquals(x, y)) 
       return 0; 
      if (object.ReferenceEquals(x, null)) 
       return -1; 
      if (object.ReferenceEquals(y, null)) 
       return 1; 

      int minLen = Math.Min(x.Length, y.Length); 
      for (int i = 0; i < minLen; i++) 
      { 
       // comparison based on ASCII value 
       int comp = x[i].CompareTo(y[i]); 
       if (comp != 0) 
        return comp; 
      } 
      return x.Length - y.Length; 
     } 
    } 

然後可以將其傳遞到OrderBy方法,例如:

var query = serialNumbers.Select(line => line.Split(',')) 
         .OrderBy(x => x[1], new Base58Comparer()) 
         .Select(x => x[0] + "," + x[1]); 
相關問題