2014-08-28 2 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 –

ответ

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(); 

Simple.

+0

Большое спасибо! – user3444535

Смежные вопросы