Главная страница
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.029 c
14-40591
Vlad
2003-09-25 12:33
2003.10.13
Задачка на логику


7-40696
waw
2003-07-25 14:52
2003.10.13
Комманда mount и блокировка CDROM


1-40412
Deb
2003-09-28 16:03
2003.10.13
Создание свойства компонента типа как у TImage.Picture


1-40500
N0wheremany
2003-10-02 10:38
2003.10.13
---!! Перебор символов !! ---


3-40308
Skalp
2003-09-23 23:58
2003.10.13
Скудный Local SQL - как изменить структуру таблицы Paradox