Diskuze: Množiny
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Jdeš na to nějak divně.. Doporučuju nastudovat základy programování
Jinak to s těmi set of string[20] - to je naprosto zbytečné.. vytvořil
bys tak množinu dvacetiznakových stringů. Použij normálně set of char.
V Pascalu jsem ale dlouho nic nedělal, takže konkrétněji ti moc poradit
nemůžu.. Najdi si někde, jak funguje set of a funkce k tomu..
A to kopírování z edit.text je blbost - to nemůže fungovat. Budeš si to muset rozparsovat. Tj. projet cyklem a rozřezat po čárkách a přiřazovat do množiny po jednotlivých znacích.
Množiny jsem už dlouho nepoužil, ale dost pochybuju, že se ti zkompiluje ten set of string[20]. Myslím, že množiny mohou být odvozeny jen od ordinálních typů (celá čísla, znak, boolean, interval, výčet a asi ještě něco dalšího) a jejich maximální velikost je 255 prvků. Interní implementace je podle mě pomocí bitových polí. Pro každý prvek, který potenciálně může být v množině, obsahuje množina bit, který je nastaven na 1, je-li onen prvek v ní a na 0, není-li tomu tak. V takovém případě by množina dvacetiznakových ANSI stringů zabírala 25620 bitů, což není zrovna málo.
Ale možná se to od dob, kdy jsem to zkoumal (ještě v Pascalu, ne v Delphi) změnilo. Ale řekl bych, že tyhle konstrukty jazyka zůstaly +- stejné, už kvůli kompatibilitě.
Novější Delphi (tak od 2010?) obsahuje generické kontejnery, kde snad je i množina (TSet<TypPrvku>). Zkus se podívat do unity Generics.Collections.
Ale když udělám tadytoto tak to taky nefunguje, hází to: Incompatible
types got "char" expected "set od char"
Var a: set od char;
i:integer;
Begin
for i:=1 to length(edit1.text) do
If edit1.text <> ',' then
a:=edit1.text[i];
a je množina, takže k ní přičítej (resp. do ní přiřazuj) zase množinu.
Var
a: set od char;
i:integer;
Begin
for i:=1 to length(edit1.text) do
If edit1.text <> ',' then
a:= a + [edit1.text[i]];
Zobrazeno 5 zpráv z 5.