Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.13;
Скачать: CL | DM;

Вниз

in кроме sets?   Найти похожие ветки 

 
АТ   (2003-10-02 16:48) [0]

Как можно реализовать максимально просто что-то типа
if "text" in ("asasd","asdasd","asd") ... ?
Т.е. использовать in но не только с ordinal type?


 
MBo ©   (2003-10-02 16:52) [1]

никак.
Поиск в сортированном списке строк или хэширование.


 
Anatoly Podgoretsky ©   (2003-10-02 17:01) [2]

MBo © (02.10.03 16:52) [1]
Сортировка не требуется, достаточно поиска в списке, массив частный случай.
Само слово IN конечно придется переименовать и превратить в функцию.


 
MBo ©   (2003-10-02 17:05) [3]

>Anatoly Podgoretsky
я указал про сортированный из-за скорости поиска (если большой список, конечно)


 
Anatoly Podgoretsky ©   (2003-10-02 17:37) [4]

Да это понятно, тебе и мне, а вот насчет него не уверен


 
АТ   (2003-10-02 17:48) [5]

Да нет, почему, все понятно. Просто мне давно было интересно можно ли именно стандартными средствами, без написания своих функций сделать поиск в массиве string.
Вообщем-то приходится пользоватся этим часто, а писать постоянно циклы или добавлять лишние компоненты не очень хочеться ...


 
MBo ©   (2003-10-02 17:53) [6]

стандартными средствами - TStringList.IndexOf


 
Карелин Артем ©   (2003-10-02 17:58) [7]

Ну еще можно типа if (pos(""text"",""asasd""asdasd""asd"")<>0) then


 
АТ   (2003-10-02 19:21) [8]

Вот! То что нужно.
А ведь можно было и догадаться, - так нет, все тянет к стандартным процедурам и .т.д. и т.п. Спасибо большое!


 
Тих   (2003-10-02 21:16) [9]

моя любимая.

function IsIn(const Value: string; const ASet: array of const): boolean;
var i: integer;
begin
Result := false;
for i:=0 to High(ASet) do
if string(ASet[i].VAnsiString) = Value then Result := true;
end;

if IsIn("aa", ["aaa", "bbb", "ccc", "dddd"]) then writeln("true");


 
Anatoly Podgoretsky ©   (2003-10-02 21:24) [10]

Тих (02.10.03 21:16) [9]
А давай посмотрим сколько времени она будет работать на миллоне строк и сравним потом с TStringList.IndexOf
Надеюсь, что у тебя нервы крепкие в обморок не упадешь


 
Тих   (2003-10-02 21:32) [11]

У меня будет работать в среднем половину времени от полной итерации по массиву. А давайте подумаем, имеет ли смысл рожать TStringList для условия, предложенного автором вопроса - выбор из трех-четырех-десяти значений. Вариант с миллионом строк, возможно, для СУБД и уместен, но там и TStringList подавится.


 
Palladin ©   (2003-10-02 21:38) [12]


> Тих (02.10.03 21:32) [11]

ничем он не давится... прекрасно отрабатывает...


 
Тих   (2003-10-02 21:42) [13]

Вот давайте пофлеймим на тему, почему Oracle написан не на Delphi и зачем придумана STL.

http://www.rsdn.ru/article/devtools/perftest.xml


 
Anatoly Podgoretsky ©   (2003-10-02 21:58) [14]

Тих (02.10.03 21:32) [11]
Чего, половину, срочно марш в Потрепаться


 
Palladin ©   (2003-10-02 22:12) [15]

TStringList при поиске значения в отсортированном списке размером в один миллион сделает около 30 итераций...


 
Palladin ©   (2003-10-02 22:13) [16]

думаю немножко не сравнимо с твоей функцией...


 
Тих   (2003-10-02 22:13) [17]

Anatoly Podgoretsky © (02.10.03 21:58) [14]

Ладно вам, накинулись )

function IsIn(const Value: string; const ASet: array of const): boolean;
var i: integer;
begin
Result := false;
for i:=0 to High(ASet) do
if string(ASet[i].VAnsiString) = Value then
begin
Result := true;
Exit;
end;
end;

Вот теперь половину.


 
Anatoly Podgoretsky ©   (2003-10-02 22:20) [18]

Тих (02.10.03 22:13) [17]
Не накинулся, но не надо утверждать, то чего нет в функции.
Вот теперь нет возражений.
И последняя оптимизация Result := false, надо поставить перед последним end



Страницы: 1 вся ветка

Текущий архив: 2003.10.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
3-40250
alex-ran
2003-09-22 11:04
2003.10.13
Выборка из таблиц с разными алиасами


3-40254
GS
2003-09-23 13:15
2003.10.13
Подскажите, что можно сделать РАСТЕТ база Access2000.


3-40263
LinOS
2003-09-23 06:36
2003.10.13
TDBLookUpListBox не позиционируется при добавлении новой записи


1-40350
DNSokol
2003-10-01 17:33
2003.10.13
Свой компонент контрола


3-40267
АлеКс
2003-09-22 05:52
2003.10.13
ADO