2014-08-28 121 views
0
var parameters = new List<KeyValuePair<string, string>>(); 
parameters.Add(new KeyValuePair<string, string>("AC", "123")); 
parameters.Add(new KeyValuePair<string, string>("Ab", "123")); 
parameters.Add(new KeyValuePair<string, string>("Db", "123")); 
parameters.Add(new KeyValuePair<string, string>("CD", "123")); 

var sortParameters = parameters.OrderBy(x => x.Key).ToList(); 

這是我的源,排序列表<KeyValuePair <int, string>>大寫和小寫

結果是

Ab 
AC 
CD 
Db 

,但我需要導致

AC 
Ab 
CD 
Db 

排序大寫和小寫。

我該如何解決它。

+0

這可能有幫助。與您的問題相同。 http://stackoverflow.com/a/13642177/3530469 – 2014-08-28 02:00:11

回答

2

這是簡單的解決方案。

SortedDictionary<string, string> parameters = new SortedDictionary<string, string>(StringComparer.Ordinal); 
     parameters.Add("AC", "123"); 
     parameters.Add("Ab", "123"); 
     parameters.Add("Db", "123"); 
     parameters.Add("CD", "123"); 
1

你可以實現你自己的IComparer<string>爲你排序。

試試這個:

public class StringByCharComparer : IComparer<string> 
{ 
    public int Compare(string x, string y) 
    { 
     var xcs = x.ToCharArray(); 
     var ycs = y.ToCharArray(); 
     return Compare(xcs, ycs); 
    } 

    private int Compare(IEnumerable<char> xs, IEnumerable<char> ys) 
    { 
     if (!xs.Any() || !ys.Any()) 
     { 
      return 0; 
     } 
     else 
     { 
      var x = xs.First(); 
      var y = ys.First(); 
      var r = x.CompareTo(y); 
      if (r == 0) 
      { 
       r = Compare(xs.Skip(1), ys.Skip(1)); 
      } 
      return r; 
     } 
    } 
} 

然後調用它像這樣:

var sortParameters = 
    parameters 
     .OrderBy(x => x.Key, new StringByCharComparer()) 
     .ToList(); 

結果我得到的是:

Key Value 
AC  123 
Ab  123 
CD  123 
Db  123 

我只是學到了一些東西從Seminda的答案。

你可能只是這樣做:

var sortParameters = 
    parameters 
     .OrderBy(x => x.Key, StringComparer.Ordinal) 
     .ToList(); 

簡單。

+0

非常感謝! – user3444535 2014-08-28 02:07:58

相關問題