Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скорость проверки условий, как сделать? 
:(
    Опции темы
Romikgy
Дата 19.7.2006, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(sgentstuff @  19.7.2006,  08:56 Найти цитируемый пост)
 этих условий  у меня будет около 200 штук

имхо это не так много условий, конечно если они не вызываются пол милиона раз,
а вообще я бы посоветовал, где то рядом с каждой строкой держать ключ который сравнивать,
кса можно еще поигратся с указателями и преобразованиями в целые числа

Добавлено @ 10:05 
sgentstuff, а могут ли в проверяемых строках быть допустим такие
'tsu' и 'tsur'? 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alexeis
Дата 19.7.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Romikgy @  19.7.2006,  09:57 Найти цитируемый пост)
а такое откомпилится? 
 нет, конечно, имена элементов множества ведь существуют только в исходном коде!

Добавлено @ 10:19 
Цитата(sgentstuff @  19.7.2006,  10:01 Найти цитируемый пост)
на счет стринг листа, если отсортировать как предложили и потом сравнивать может все-таки быстрее будет? 

Если все строки такие маленькие 3-5 симвотов, то лучше оставить как есть. 

Это сообщение отредактировал(а) alexeis1 - 19.7.2006, 10:15


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Girder
Дата 19.7.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



xxx='|me|tur|na|afr';
if pos('|'+s2,xxx) then... 


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Romikgy
Дата 19.7.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Girder, я тоже так подумал только два замечания:
1. это дельфи форум  smile 
2. если будет
Код

xxx='|me|turs|tur|na|afr';
if pos('|'+s2,xxx) then...  

tur - будет строкой поиска то никогда правильного результата не получишь , плюс символ | не может быть в строках   

Это сообщение отредактировал(а) Romikgy - 19.7.2006, 10:57


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
sgentstuff
Дата 19.7.2006, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: нет
Всего: 1



Цитата(Romikgy @ 19.7.2006,  10:01)
Цитата(sgentstuff @  19.7.2006,  08:56 Найти цитируемый пост)
 этих условий  у меня будет около 200 штук

имхо это не так много условий, конечно если они не вызываются пол милиона раз,
а вообще я бы посоветовал, где то рядом с каждой строкой держать ключ который сравнивать,
кса можно еще поигратся с указателями и преобразованиями в целые числа

Добавлено @ 10:05 
sgentstuff, а могут ли в проверяемых строках быть допустим такие
'tsu' и 'tsur'?

неа! 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Romikgy
Дата 19.7.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



имхо самое быстро будет так
Код

var sl: TStringList;
findtext: string;
begin
sl:=TStringList.Create;
sl.Add('turist');
sl.Add('turf');
sl.Add('tur');
sl.Add('rgy');
sl.Delimiter:='+';
findtext:= 'tur';
if Pos('+'+findtext+'+',sl.DelimitedText)<>0 then
// если есть совпадение
MessageBox(HWND(nil),Pchar('Est'),Pchar('Hi'),0)
else
//если нет совпадения
MessageBox(HWND(nil),Pchar('Net'),Pchar('Hi'),0);
;
sl.Free;

end;
 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
sgentstuff
Дата 19.7.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: нет
Всего: 1



Цитата(alexeis1 @ 19.7.2006,  09:15)
sgentstuff, не знаю на сколько здесь критично использование именно строк, но можно все строковые константы, заменить перечисляемым типом и проверить попадает ли число во множество состоящее из этих констант.

покажите пример пожалуйста! 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Alexeis
Дата 19.7.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



ну тогда можно чуть поправить
Код

xxx := #1'me'#1'turs'#1'tur'#1'na'#1'afr'#1;
if pos(#1+s2+#1, xxx) <> 0
  then... 


Добавлено @ 11:26 
Цитата(sgentstuff @  19.7.2006,  11:19 Найти цитируемый пост)
покажите пример пожалуйста!

Код

  type
    strs = (me, tur, na);

  var
    n : array[strs] of AnsiString = ('me', 'tur', 'na');

procedure TForm1.btn1Click(Sender: TObject);
var
  strset : set of strs;
begin
  strset := [me, tur, na];
  if s2 in strset
  then
    ShowMessage('равно одному из значений');
end;
  

Это сообщение отредактировал(а) alexeis1 - 19.7.2006, 11:29


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Mechanic
Дата 19.7.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



А я бы составил строку из всех вариантов, типа
Код

Model := #9+'tur'+#9+'na'+#9+'afr'+#9+'aust'..... +#9;
if Pos(#9+s2+#9,Model)=0 then ...


Ой, уже показал этот вариант alexeis1. Только похоже, этот самый быстрый, по-любому. 

Это сообщение отредактировал(а) Mechanic - 19.7.2006, 12:45
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
sgentstuff
Дата 19.7.2006, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: нет
Всего: 1



Цитата(Romikgy @ 19.7.2006,  11:17)
имхо самое быстро будет так
Код

var sl: TStringList;
findtext: string;
begin
sl:=TStringList.Create;
sl.Add('turist');
sl.Add('turf');
sl.Add('tur');
sl.Add('rgy');
sl.Delimiter:='+';
findtext:= 'tur';
if Pos('+'+findtext+'+',sl.DelimitedText)<>0 then
// если есть совпадение
MessageBox(HWND(nil),Pchar('Est'),Pchar('Hi'),0)
else
//если нет совпадения
MessageBox(HWND(nil),Pchar('Net'),Pchar('Hi'),0);
;
sl.Free;

end;

проверил я этот способ, скорость работы таже! 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Romikgy
Дата 19.7.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



значит тормозит не в условиях! 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
sgentstuff
Дата 19.7.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: нет
Всего: 1



пишу я так, но в переменных не может быть пробела
Код

type    
    nurset = (ark-k, nursat, nur, nurs);


Добавлено @ 12:49 
Цитата(Romikgy @ 19.7.2006,  12:44)
значит тормозит не в условиях!

почему этот способ не берет первую переменную? 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Girder
Дата 19.7.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Цитата(sgentstuff @  19.7.2006,  13:42 Найти цитируемый пост)
скорость работы таже!
А ты список каждый раз создаеш?  smile 
  


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
sgentstuff
Дата 19.7.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: нет
Всего: 1



Romikgy - твой способ почему-то неберет первую переменную, видимо у нее нет впереди '+'

Добавлено @ 13:02 
Цитата(Girder @ 19.7.2006,  13:00)
Цитата(sgentstuff @  19.7.2006,  13:42 Найти цитируемый пост)
скорость работы таже!
А ты список каждый раз создаеш?  smile

1 раз! 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Romikgy
Дата 19.7.2006, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



сделай так
Код

if Pos(findtext+'+',sl.DelimitedText)<>0 then

и в конце массива добавлений добавь
Код

sl.Add('');
 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0596 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.