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

Вниз

чайник про множества   Найти похожие ветки 

 
denis24   (2005-01-14 10:56) [0]

Даже стыдно спрашивать.....
Как проверить входит ли строковая перемен в множество
например
str:="aa"
if str not in ["bb","cc","dd"] then......


 
Fay ©   (2005-01-14 10:57) [1]

Так низя - это подойдёт только для ординальных типов.


 
denis24   (2005-01-14 10:59) [2]

тока if?


 
denis24   (2005-01-14 11:00) [3]

тока if?


 
Fay ©   (2005-01-14 11:01) [4]

В общем случае - да, только if.


 
Гы   (2005-01-14 11:05) [5]

Гы-гы ... попробуй for...


 
ЮЮ ©   (2005-01-14 11:10) [6]


function IsOneOf(const s: string; list: array of string): boolean;
var
 i: integer;
begin
 for i := low(list) to high(list) do
   if AnsiCompareText(s, list[i]) = 0 then begin
     result := true;
     exit;
   end;
 result := false;
end;

Использовать:
 if IsOneOf(str, ["bb","cc","dd"]) then


 
begin...end ©   (2005-01-14 11:15) [7]

> [6] ЮЮ ©   (14.01.05 11:10)

Модуль StrUtils, функция AnsiIndexStr.


 
Anatoly Podgoretsky ©   (2005-01-14 13:26) [8]

str:="aa"
if Pos(str, "bbccdd") > 0 then......


 
Fay ©   (2005-01-14 13:27) [9]

str := "bc"


 
Юрий Зотов ©   (2005-01-14 13:46) [10]

if SringList1.IndexOf("aa") >= 0 then ...

При Sorted=True сработает существенно быстрее, чем прямой перебор по массиву.


 
begin...end ©   (2005-01-14 13:50) [11]

> [10] Юрий Зотов ©   (14.01.05 13:46)

> сработает существенно быстрее, чем прямой перебор по массиву

Да, но StringList вначале надо создать и заполнить.


 
Юрий Зотов ©   (2005-01-14 13:54) [12]

begin...end ©   (14.01.05 13:50) [11]

Э-э-э... а массив не надо?


 
begin...end ©   (2005-01-14 14:01) [13]

> [12] Юрий Зотов ©   (14.01.05 13:54)

Я просто понял задачу автора ветки так: нужно проверить, встречается ли заранее НЕизвестная строка в заранее известном множестве (см. его пост [0]). Массив можно "создать" при передаче его в AnsiIndexStr, например:

var
 Str: String;

begin
 if AnsiIndexStr(Str, ["aa", "bb", "cc"]) then
   ...
end.


А в случае с TStringList придётся делать так:

var
 Str: String;

begin
 with TStringList.Create do
   try
     Sorted := True;
     Add("aa");
     Add("bb");
     Add("cc");
     if IndexOf(Str) >= 0 then
       ...
   finally
     Free
   end
end.


 
begin...end ©   (2005-01-14 14:03) [14]


> if AnsiIndexStr(Str, ["aa", "bb", "cc"]) then

if AnsiIndexStr(Str, ["aa", "bb", "cc"]) >= 0 then


 
Юрий Зотов ©   (2005-01-14 14:08) [15]

> begin...end ©   (14.01.05 14:01) [13]
> Я просто понял задачу автора ветки так: нужно проверить,
> встречается ли заранее НЕизвестная строка в заранее известном
> множестве (см. его пост [0]). Массив можно "создать" при
> передаче его в AnsiIndexStr

Я тоже понял именно так. А если множество строк заранее известно, то зачем же создавать его каждый раз заново, если можно (и нужно) сделать это один раз?

А потом просто вызывать IndexOf.


 
begin...end ©   (2005-01-14 14:11) [16]

> [15] Юрий Зотов ©   (14.01.05 14:08)

> А если множество строк заранее известно, то зачем же создавать
> его каждый раз заново, если можно (и нужно) сделать это
> один раз?

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


 
Юрий Зотов ©   (2005-01-15 11:50) [17]

> begin...end ©   (14.01.05 14:11) [16]

Естественно. Все зависит от задачи.


 
Anatoly Podgoretsky ©   (2005-01-15 14:45) [18]

Fay ©   (14.01.05 13:27) [9]
Вопрос был про aa, пусть для начала уточнит свой вопрос.


 
SergP ©   (2005-01-15 15:19) [19]


>  [8] Anatoly Podgoretsky ©   (14.01.05 13:26)
> str:="aa"
> if Pos(str, "bbccdd") > 0 then......
>
>
>  [9] Fay ©   (14.01.05 13:27)
> str := "bc"


Тогда:

str:="aa";
if (Pos(str, "bbccdd") mod 2) =1  then......


 
avik ©   (2005-01-15 16:18) [20]

проще всего использовать массив и проверочку
if или case  по честному!!!
удачи !!!


 
Anatoly Podgoretsky ©   (2005-01-15 16:39) [21]

SergP ©   (15.01.05 15:19) [19]
Тут две ошибки, сработает и для невхождения, кроме того сработает не так, надо две проверки POS>0 и вторая mod 2) = 0


 
Anatoly Podgoretsky ©   (2005-01-15 16:41) [22]

А лучше использовать вместо mod функцию even/odd


 
Anatoly Podgoretsky ©   (2005-01-15 16:42) [23]

Ошибся одна ошибка = 1 правильно.



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

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

Наверх




Память: 0.52 MB
Время: 0.026 c
6-1100429655
Алексей
2004-11-14 13:54
2005.01.30
IID_IHTMLElementRender на Дельфи 6


1-1105962465
XmeD
2005-01-17 14:47
2005.01.30
oleVariant -> pWideChar


3-1103794027
YuRock
2004-12-23 12:27
2005.01.30
Странная работа функций в Oracle


1-1105918922
VAmpiru$
2005-01-17 02:42
2005.01.30
Как на паскале создать безразмерный файл?


1-1105640042
Серьезный Сэм
2005-01-13 21:14
2005.01.30
Исходный HTML-код в TWebBrowser