![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Sash_79 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.5.2007 Репутация: нет Всего: нет |
привет! не получается разобраться с Array.Sort(), мне необходимо произвести сортировку по двум показателям,для использования сортировки по второму показателю использую интерфейс IComparer и вспомогательный класс SortBy. Так вот компилятор ругается, на
Array.Sort(mas, new SortBy()); говорит что вместо new SortBy() необходим параметр типа Array.Хотя в книге говориться,что System.Array предусматривает множество вариантов Sort(),и один из них,как раз и должен принимать объект реализующий IComparer Что делать? ![]() using System; using System.Collections.Generic; using System.Text; //using System.Collections; namespace glava4_sravnenie { interface IComparer { int Compare(object m1, object m2); } public class SortBy : IComparer { public SortBy() { } int IComparer.Compare(object m1, object m2) { car t1 = (car)m1; car t2 = (car)m2; return String.Compare(t1.name, t2.name); } } public class car : IComparable { public int id; public string name; public car(int id, string name) { this.id = id; this.name = name; } int IComparable.CompareTo(object o) { car temp = (car)o; if (this.id > temp.id) return 1; if (this.id < temp.id) return -1; else return 0; } } class work { static void Main(string[] args) { car[] mas = new car[3]; mas[0] = new car(79, "Mers"); mas[1] = new car(25, "ABMW"); mas[2] = new car(25, "Opel"); Console.WriteLine("Ne otsortirovannui massive:"); foreach (car c in mas) { Console.WriteLine(c.id + " " + c.name); } Array.Sort(mas, new SortBy()); Console.WriteLine("A teper otsortirovannui:"); foreach (car c in mas) { Console.WriteLine(c.id + " " + c.name); } Console.ReadLine(); } } } |
|||
|
||||
thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
Sash_79,
Надо сначала создать обьект сравнения, а потом его подставлять в качестве параметра в метод Sort(). Ошибка записи
Надо что то типа
Это сообщение отредактировал(а) thomas - 11.11.2007, 17:17 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
Sash_79 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.5.2007 Репутация: нет Всего: нет |
thomas, исправил, но компилятор выдает ту же ошибку
|
|||
|
||||
Magnetic |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 11.11.2006 Репутация: нет Всего: 1 |
Почему закомментировано включение //using System.Collections; ?
Интерфейс IComparer находится в пространстве имен System.Collections, его не нужно объявлять как пользовательский. Думаю, ошибка из-за этого. Попробуйте раскомментировать включение пространства имен и уберите описание интерфейса IComparer. У меня код с такими поправками работает. Это сообщение отредактировал(а) Magnetic - 11.11.2007, 19:17 --------------------
Dude, where's my car? |
|||
|
||||
1stain |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 3 Всего: 40 |
ты ж здесь
осуществляешь только явную (explicit) реализацию интерфейса IComparer, следовательно в методе Sort, тебе тоже надо привести класс SortBy к интерфейсу IComparer
з.ы. Извеняюсь, фигню сморозил... ученье конечно свет, но не стоит привыкать писать свои варианты того, что есть в библиотеке классов. Это сообщение отредактировал(а) 1stain - 11.11.2007, 22:00 -------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) ![]() |
||||
|
|||||
Sash_79 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.5.2007 Репутация: нет Всего: нет |
[/B],Magnetic, если я уберу описание интерфейса Comparer, то программа будет сортировать массив только по именам, а по идентификаторам нет
Добавлено через 3 минуты и 19 секунд 1stain, компилятор всё равно требует чтоб второй параметр Array.Sort() был массивом) |
|||
|
||||
1stain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 3 Всего: 40 |
Sash_79, интересно, ты сам дома учишь шарп по троелсену, или еще ходишь куда-то на занятия?
если первое, то внимательнее читай книги и доки. Если второе - то что у тебя там за препод? интерфейс IComparer уже реализован в пространстве System.Collections. Как раз это тебе пытаецца объяснить Magnetic. И реализован намного более опытными людьми. Вот его и юзай. Кроме того, позволю себе дать пару советов по синтаксису: пространства имен, классы и интерфейсы называй с большой буквы. прменьше используй public поля, а юзай свойства. я бы сделал примерно так (тут я использую дженерики - если пока не знаешь, что это такое - не страшно)
-------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) ![]() |
|||
|
||||
Sash_79 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.5.2007 Репутация: нет Всего: нет |
1stain, Спасибо за совет
![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |