Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
!Omega
14 / 14 / 3
Регистрация: 14.02.2010
Сообщений: 293
#1

Работа интерфейса IComparable сортирование по нескольки полям

06.10.2012, 12:01. Просмотров 1180. Ответов 3
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class A:IComparable
{
int x;
int y;
int z;
 
public A(int t1,int t2,int 3)
{
x=t1;
y=t2;
z=t3;}
 
int IComparable.CompareTo(object o){
A p=(A)o;
if(this.p.x<p.x)
return 1;
if(this.p.x>p.x)
return -1;
else
return 0
}
а если мне надо сделать сортирования по нескольким полям по нажатию кнопки:
Button1 - сортируєт по Х
Button2 - сортируєт по У
Button4 - по Z
как такое сделать???
перегрузить метод компаре? или как????
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2012, 12:01
Ответы с готовыми решениями:

Исключение при реализации интерфейса IComparable
При сравнении метод Array.Sort(db_object); выдает исключение {&quot;По крайней мере...

Работа с интерфейсами ICloneable, IComparable и IComparer
Помогите пожалуйста. Только пожалуйста не нужно писать о том, что тут все легко...

Сортирование массива
Доброго времени суток. Помогите пожалуйста нубу) Имеется двумерный массив...

Сортирование массива
Такой вопрос: есть массив чисел, нужно их отсортировать по возрастанию....

Работа интерфейса IEnumerable и ошибка преобразования типов
у меня есть клас: class DAD2 { public string name { get;...

3
turbanoff
Эксперт Java
4015 / 3750 / 741
Регистрация: 18.05.2010
Сообщений: 9,329
Записей в блоге: 11
Завершенные тесты: 1
06.10.2012, 13:01 #2
Есть несколько способов.
Написать отдельный класс, реализующий интерфейс IComparer, и передевать его в методы сортировки.
Или использовать LINQ OrderBy с лямбдами.
0
kolorotur
Эксперт .NET
10188 / 8549 / 2109
Регистрация: 17.09.2011
Сообщений: 14,687
Завершенные тесты: 1
06.10.2012, 15:44 #3
Есть интерфейс IComparer, в котором можно реализовать сравнение по необходимому свойству.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class XComparer : IComparer<A>
{
   public int Compare(A x, A y)
   {
      if (x == null) return -1;
      if (y == null) return 1;
      return x.x.CompareTo(y.x);
   }
}
 
class YComparer : IComparer<A>
{
   public int Compare(A x, A y)
   {
      if (x == null) return -1;
      if (y == null) return 1;
      return x.y.CompareTo(y.y);
   }
}
 
class ZComparer : IComparer<A>
{
   public int Compare(A x, A y)
   {
      if (x == null) return -1;
      if (y == null) return 1;
      return x.z.CompareTo(y.z);
   }
}
И передавать соответствующий экземпляр в метод сортировки.
1
!Omega
14 / 14 / 3
Регистрация: 14.02.2010
Сообщений: 293
07.10.2012, 01:42  [ТС] #4
turbanoff
приведи примеры пожалуйста...

Добавлено через 1 час 5 минут
kolorotur спасибо!

Добавлено через 2 часа 13 минут
что то я не работаєт
как его теберь визвать?
я делаю так:
C#
1
2
3
4
5
6
7
8
9
10
11
 class c:IComparer<A>
    {
 
        public int Compare(A x, A y)
        {
            if (x == null) return 1;
            if (y == null) return -1;
            else
             return   x.code.CompareTo(y.code);
        }
    }
C#
1
2
c p = new c();
            Array.Sort(p);
что не так?

Добавлено через 6 часов 37 минут
что не так?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2012, 01:42

Поиск по нескольки полям...
Всем доброго времени суток. Не подскажите, как организовать поиск в БД по...

вывести одну запись из нескольки
Есть две таблицы, связанные один ко многим (Человек - Достижения). В таблице...

вычисление нескольки чисел в текстбоксе
Здраствуйте. вот я ввожу в текстбокс число и программа высчитывает и выдает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru