Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];

Вниз

Изящно, как case of, но со string... как?   Найти похожие ветки 

 
Vlad Oshin ©   (2007-07-20 11:27) [0]

case a of
case1:
case2:

а со строками?

не писать же
b:=a;
if a = "case1" then
if a = "case2" then
...
if a = "case28" then
if b=a then ТоЧтоИначеВCase


 
DrPass ©   (2007-07-20 11:28) [1]

idx:= strtoint(copy(a, 5, length(a) - 4));
case idx of...


 
Skyle ©   (2007-07-20 11:32) [2]

1)

const
 S = ".case1.case2.case3.....";

case Pos("." + MyString + ".", S) of
1 :
7 :...
....

2).
 SL := TStringList.Create;
 SL.Add("case1");
......

 case SL.IndexOf(MyString) of
 1 :
 2 :
 .....


 
Vlad Oshin ©   (2007-07-20 11:32) [3]

?
да не,

а="case1";
или
а="kjh";


 
Vlad Oshin ©   (2007-07-20 11:36) [4]


> Skyle ©   (20.07.07 11:32) [2]

ясно. Это думал, это не изящно :)


 
Сергей М. ©   (2007-07-20 11:45) [5]

function StrIdx(Str: String; StrList: array of const): Integer;
begin
 for Result:= 0 to Length(StrList)-1 do
   if StrList[Result]= Str then Exit;
 Result := -1;      
end;

..

case StrIdx("case3", ["case1", "case2", "case3", "case4"]) of
 0: .. case1 ..
 1: .. case2 ..
 2: .. case3 ..
 3: .. case4 ..
else
.. no case ..
end;


 
Skyle ©   (2007-07-20 11:47) [6]


> Vlad Oshin ©   (20.07.07 11:36) [4]
>
> > Skyle ©   (20.07.07 11:32) [2]
>
> ясно. Это думал, это не изящно :)

Хм... Ну а

case MySupaHash(MyString) of
 PreCalcHash1 :
 PreCalcHash2 :
.......


 
Sandman29 ©   (2007-07-20 11:53) [7]

Есть мнение, что использование case следует заменять полиморфизмом.


 
Vlad Oshin ©   (2007-07-20 12:07) [8]

ясно. Брать функцию.
примерно так и подозревал, спасиб

надеялся, что как-то кто-то уже и case приучил к подобному
попроще и побустрее чтоб было.


 
Anatoly Podgoretsky ©   (2007-07-20 13:54) [9]

> Vlad Oshin  (20.07.2007 12:07:08)  [8]

Так case это всего лишь альтернативная форма


if
else if
else


 
Vlad Oshin ©   (2007-07-20 14:29) [10]

Ваша правда ctrl alt с все показал, сразу надо было нажать
тогда по-честному кучу if поставить, быстрее будет.


 
Anatoly Podgoretsky ©   (2007-07-20 14:34) [11]

И главное код понятный.


 
Vendict ©   (2007-07-20 17:31) [12]

Vlad Oshin ©   (20.07.07 12:07) [8]

надеялся, что как-то кто-то уже и case приучил к подобному
попроще и побустрее чтоб было.


есть вариант, но прошлый раз его здесь ругали:
http://andy.jgknet.de/dlang/

DLangExtensions
About

The DLangExtensions adds new language constructs to the ObjectPascal language. This is achieved by using a preprocessor for the IDE and the command line compiler.

Available Language Extensions
case-string-of

The case-string-of extension introduces a case-of that uses strings instead of ordinal-values.Syntax

case string string-expression of
 string-literal/string-constant [, string-literal/string-constant ...]: statement;
 ...
[else
 statements]
end;


 
TUser ©   (2007-07-20 19:36) [13]

const
Names: array [0..11] of shortstring = ...
Schemes: array [0..11] of shortstring = ...

    for i := 0 to length (Names) - 1 do
      if Name = Names[i] then begin
        writeln (StringReplace(Schemes[i],"_",#13,[rfReplaceAll]));
        goto end_of_motif;
        end;
    writeln ("UNCKNOWN MOTIF");
    end_of_motif:


Каждый фрукт, как говорится ...


 
Kolan ©   (2007-07-20 21:44) [14]

> Есть мнение, что использование case следует заменять полиморфизмом.

А как ты тут заменишь? Просто что-то не соображу.

Те надо заменить:

case S of
 "1": Result := 1;
 "2": Result := 2;
end;


?


 
isasa ©   (2007-07-21 00:04) [15]

:)
А в таком варианте
StrToIntDef(...) не прокатит?


 
Sandman29 ©   (2007-07-23 09:36) [16]

Kolan ©   (20.07.07 21:44) [14]

TBaseClass = class
 ...
 procedure DoIt; virtual; abstract;
end;

TCase1 = class(TBaseClass)
 ...
 procedure DoIt; override;
end;

TCase2 = class(TBaseClass)
 ...
 procedure DoIt; override;
end;



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

Форум: "Прочее";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.076 c
5-1159542115
ProgRAMmer Dimonych
2006-09-29 19:01
2007.08.19
Отлов клавы в одной процедуре


15-1185099697
ProgRAMmer Dimonych
2007-07-22 14:21
2007.08.19
Борьба с повторной отправкой формы


2-1184903356
barin
2007-07-20 07:49
2007.08.19
тип данных


1-1181721913
xpublic
2007-06-13 12:05
2007.08.19
Как получить список всех пунктов меню для организации доступа


2-1184918070
wWwWw
2007-07-20 11:54
2007.08.19
Как отследить нажатие комбинации клавиш?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский