Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2012, 16:58   #1
Matr1x
Студент
Пользователь
 
Аватар для Matr1x
 
Регистрация: 10.11.2009
Сообщений: 49
По умолчанию Лексикографическая сортировка словаря

Подскажите пожалуйста как реализовать)

Есть массив(словарь) слов (объекты типа string). Надо произвести лексикографическую сортировку.
Т.е.
Киви
Дыня
Арбуз
должны сортироваться в:
Арбуз
Дыня
Киви
причем сортировка не должна ограничиваться первой буквой слова т.е. есть на букву А будут начинаться 2 слова например:
Арбуз
Ананас
должны сортироваться в:
Ананас
Арбуз
т.е. сортироваться по последующим буквам

Буду рад любым размышлениям и подсказкам! Заранее спасибо.
Matr1x вне форума Ответить с цитированием
Старый 18.03.2012, 17:13   #2
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Код:
var arr = new[]{"Арбуз", "Ананас", "Киви", "Дыня"};
Аrray.Sort(arr);
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
Lasur вне форума Ответить с цитированием
Старый 18.03.2012, 17:34   #3
Matr1x
Студент
Пользователь
 
Аватар для Matr1x
 
Регистрация: 10.11.2009
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Lasur Посмотреть сообщение
Код:
var arr = new[]{"Арбуз", "Ананас", "Киви", "Дыня"};
Аrray.Sort(arr);
огромное спасибо! очень изящно. Сделал через список так
Код:
List<string> list = new List<string>() { "Арбуз", "Ананас", "Киви", "Дыня" };
list.Sort();
Конечно понимаю что велосипед изобретать не надо, но можете подсказать как это все изнутри работает, для сортировки по первой букве все просто, надо отсортировать list[i, 0], но что делать если надо сортировать по всем буквам в слове как в нашем случае?
Matr1x вне форума Ответить с цитированием
Старый 18.03.2012, 17:50   #4
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

List или Array проверяют наследуют ли объекты интерфейс IСomparable. Если наследуют - сортируют, использую метод Compare, предоставляемый интерфейсом (скорее всего, методом быстрой сортировки). Если нет - вылетает Exception.

Как реализована сортировка в деталях я вам не скажу. Хотите - можете посмотреть исходный код реализации string. Общий алгоритм, скорее всего, таков (или схож):
1.До тех пор пока есть буквы у обоих слов
1.1.Если буква слова 1 больше - слово 1 больше, выход
1.2.Иначе, если буква слова 2 больше - слово 2 больше, выход
1.3.Иначе (если одинаковы) - переходим к следующей букве
2.
2.1.Если у обоих слов закончились буквы - слова равны, выход
2.2.Иначе, если у слова 1 закончились буквы - слово 2 больше, выход
2.3.Иначе (если у слова 2 закончились буквы) - слово 1 больше, выход
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
Lasur вне форума Ответить с цитированием
Старый 18.03.2012, 18:05   #5
Matr1x
Студент
Пользователь
 
Аватар для Matr1x
 
Регистрация: 10.11.2009
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Lasur Посмотреть сообщение
List или Array проверяют наследуют ли объекты интерфейс IСomparable. Если наследуют - сортируют, использую метод Compare, предоставляемый интерфейсом (скорее всего, методом быстрой сортировки). Если нет - вылетает Exception.

Как реализована сортировка в деталях я вам не скажу. Хотите - можете посмотреть исходный код реализации string. Общий алгоритм, скорее всего, таков (или схож):
1.До тех пор пока есть буквы у обоих слов
1.1.Если буква слова 1 больше - слово 1 больше, выход
1.2.Иначе, если буква слова 2 больше - слово 2 больше, выход
1.3.Иначе (если одинаковы) - переходим к следующей букве
2.
2.1.Если у обоих слов закончились буквы - слова равны, выход
2.2.Иначе, если у слова 1 закончились буквы - слово 2 больше, выход
2.3.Иначе (если у слова 2 закончились буквы) - слово 1 больше, выход
понял! для каждого класса(объекты которого надо сортировать) наследуй интерфейс, и определяй метод Compare, в string сравнение двух слов описано, еще раз спасибо!
Matr1x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка словаря ! himic888 Помощь студентам 0 02.05.2011 17:26
[ActionScript 2.0] Создание словаря Рамик JavaScript, Ajax 0 07.04.2011 12:36
Создание словаря KASPEER HTML и CSS 1 05.04.2011 00:48
Файлы. Лексикографическая сортировка. stear Общие вопросы C/C++ 2 09.12.2009 20:14
Создание словаря tmp_user Помощь студентам 5 24.11.2007 18:30