2013-04-11 3 views
0

Я хочу создать IComparer<string> для SortedDictionary<string, int>, который будет сортировать все по алфавиту, но если он увидит ключ «Другого», он поместит «Другое» в конце списка.Пользовательский IComparer

+1

Достойный гол. Как это происходит? –

ответ

2

Вы имеете в виду вот это?

public sealed class MyComparer : Comparer<string> 
{ 
    public override int Compare(string x, string y) 
    { 
     if(x == "Other") 
      return y == "Other" ? 0 : 1; 

     if(y == "Other") 
      return -1; 

     // Change this comparer if required. 
     return StringComparer.OrdinalIgnoreCase.Compare(x, y); 
    } 
} 

Использование:

var dict = new SortedDictionary<string, int> (new MyComparer()) 
{ 
    { "Other", 1 }, { "aaa", 2 }, { "bbb", 3 } 
}; 

Очевидно, что вы можете сделать это более общим путем записи SpecialCaseAtEndComparer<T> по:

  1. Позволяюще "специальное" значение, которое будет введено в компаратор.
  2. Позволяет вводить «нормальный» компаратор в компаратор.
  3. Выполнение сравнения для всех типов, а не только строк.
+0

Отлично работает! Благодарю. –

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