OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 22:22

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 14 Декабрь, 2011 16:15 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Это нужно для выстраивания слов в алфавитном порядке.

Что-то под рукой не нашлось ничего подходящего, но перед тем как "изобрести велосипед", решил спросить у сообщества - может, кто-то уже делал подобное?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Декабрь, 2011 16:58 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Настал момент наполнить Strings содержимым, соответствующим названию
upd: но не в этот раз :)


Последний раз редактировалось Пётр Кушнир Среда, 14 Декабрь, 2011 17:25, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Декабрь, 2011 17:02 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
a$ < b$, a$ = b$ --- это и есть лексикографическое сравнение. Самый простой вариант. Возможно эти две операции с т.з. скорости будут достаточны и можно ничего больше не писать.

Для упорядочивания выгоднее использовать rel = signum(a - b).
rel = -1 -> a < b
rel = 0 -> a = b
rel = 1 -> a > b
rel можно считать для строк по аналогии, ориентируюясь на лексикографическое сравнение a<b,.... В этом случае операция "сравнения" (проход по строке) одна.

Инструкция x86, генерируемая ББ для сравнения "строк", rel выдаёт, но в КП (на выском уровне) получить его нельзя. Вопрос же писать высокоуровневый цикл для вычисления rel, либо использовать две операции a$ < b$, a$ = b$, нужно решать исходя из числа операций и длины строк.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Декабрь, 2011 17:24 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Воистину, далеко ходить не надо! Тем более, что ББ 1.6, юникодный. Евгений, спасибо, а мне надо чаще заглядывать в сообщение о языке :)

Одна небольшая проблема - этот оператор неправильно распознаёт букву Ё. Хотя это проблема юникода, там ё стоит в конце последовательности нижнерегистрового алфавита, а Ё - в начале последовательности верхнерегистрового алфавита. Да и не важно, слов на Ё немного, и даже если они будут не так отсортированы - ничего страшноо не случится.

P.S. Замеров скорости сравнения ещё не делал. Как-нибудь на досуге померяю, ради интереса. Сейчас задачи оптимизировать просто не стоит - списки людей относительно небольшие.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Декабрь, 2011 17:30 

Зарегистрирован: Четверг, 23 Апрель, 2009 18:01
Сообщения: 219
Как вариант WinApi CompareStringW. Очень много моментов учитывается, в отличие от бинарного сравнения.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB