2015-09-30 4 views
0

У меня есть ListinputColl типа MyValue со многими повторяющимися ключами:Список Сортировки с помощью клавиш дублирующих нестандартном компаратора

myValue1.Id=100; 
myValue2.Id=100; 
...etc 

И у меня есть собственный компаратор для сравнения двух MyValue элементов по Id:

inputColl.Sort(myValueComparer); 

Что я делаю неправильно?

Comparer:

public class MyValueComparerById : IComparer<MyValue> 
{ 
    public int Compare(MyValue x, MyValue y) 
    { 
     if (x.Id == y.Id) 
      return 0; 
     else if (x.Id > y.Id) 
      return -1; 
     else if (x.Id < y.Id) 
      return 1; 

     return 0; 
    } 
} 
+0

Почему вы не запускаете и не видите, как это происходит? –

+0

Опубликовать код сравнения, а также. –

+0

В чем проблема, с которой вы столкнулись? – tomab

ответ

4

Если ваше равенство Comparer не не реализуется плохо, ваше решение должно работать.

Но я предлагаю более простой подход, используя LINQ:

inputCol = inputCol.OrderBy(o => o.Id).ToList(); 
4

У вас уже есть int компаратор так лучше использовать его вместо того, чтобы переписать ту же логику:

public class MyValueComparerById : IComparer<MyValue> 
{ 
    public int Compare(MyValue x, MyValue y) 
    { 
     return x.Id.CompareTo(y.Id);   
    } 
} 

** Обновление редактировать **

Для дальнейших усовершенствований, возможно, вы захотите рассмотреть дополнительное сравнение в случае равенства Id:

public class MyValueComparerById : IComparer<MyValue> 
{ 
    public int Compare(MyValue x, MyValue y) 
    { 
     var firstResult = x.Id.CompareTo(y.Id);   
     if (firstResult == 0) 
     { 
      // I'm assuming that MyValue has an additional string property named 'SomeName' 
      return x.SomeName.CompareTo(y.SomeName); 
     } 
     return firstResult; 
    } 
} 
Смежные вопросы