Zbiory
Przekierowano z Set
Set - zbiór. Zbiory (sets) są unikatowym, bardzo efektywnym mechanizmem właściwym językowi Pascal. Zbiory wykorzystuje się do przechowywania kolekcji elementów porządkowych. Zbiory deklaruje się za pomocą dyrektywy: set of, np:
Jak wcześniej wspomniałem, zbiory służą do deklarowania prostych typów porządkowych, toteż takie deklaracje są niewłaściwe:
string nie jest typem wyliczeniowym, natomiast dwie następne deklaracje są niepoprawne ponieważ zbiory mogą maksymalnie zawierać 256 elementów, a numery porządkowe elementów muszą zawierać się w zakresie od 0 do 255 - Word i Integer dają nam dużo więcej elementów, ponadto Integer dałby nam elementy o numerach porządkowych ujemnych (Ord(Low(Integer)) < 0).
Zbiory mogą maksymalnie zawierać 256 elementów, a numery porządkowe elementów nie mogą przekraczać zakresu 0..255.
Inne sposoby deklaracji zbiorów:
Aby przypisać do zbioru jakieś elementy należy użyć konstrukcji:
Wyrażenie [] oznacza zbiór pusty.
Aby dodać lub odjąć elementy zbiorów postępujemy tak jak w matematyce:
Aby dołączyć/wyłączyć jeden element do zbioru możemy posłużyć się funkcjami Include() i Exclude():
Jaka jest różnica między tymi dwoma metodami? Cytując za http://www.borland.pl/tech/optymalizacja_wydajnosci.shtml:
Iloczyny zbiorów zapisujemy:
Aby sprawdzić, czy w zbiorze znajduje się dany element, posługujemy się operatorem in:
Do sprawdzania, czy dany zbiór zawiera się w innym zbiorze należy posłużyć się operatorem: <=:
Jak wcześniej wspomniałem, zbiory służą do deklarowania prostych typów porządkowych, toteż takie deklaracje są niewłaściwe:
string nie jest typem wyliczeniowym, natomiast dwie następne deklaracje są niepoprawne ponieważ zbiory mogą maksymalnie zawierać 256 elementów, a numery porządkowe elementów muszą zawierać się w zakresie od 0 do 255 - Word i Integer dają nam dużo więcej elementów, ponadto Integer dałby nam elementy o numerach porządkowych ujemnych (Ord(Low(Integer)) < 0).
Zbiory mogą maksymalnie zawierać 256 elementów, a numery porządkowe elementów nie mogą przekraczać zakresu 0..255.
Inne sposoby deklaracji zbiorów:
type
TWeekDays = (Ni, Pn, Wt, Sr, Cz, Pt, So);
TWeekDaysSet = set of TWeekDays ; // zbiór oparty na typie wyliczeniowym
TDigits = set of 0 .. 9
TLetters = set of 'A' .. 'Z';
TWeekDays = (Ni, Pn, Wt, Sr, Cz, Pt, So);
TWeekDaysSet = set of TWeekDays ; // zbiór oparty na typie wyliczeniowym
TDigits = set of 0 .. 9
TLetters = set of 'A' .. 'Z';
Działania na zbiorach
Aby przypisać do zbioru jakieś elementy należy użyć konstrukcji:
var
Samogloski, Spolgloski, Krzaczki: set of Char;
// ...
begin
Samogloski := ['a', 'e', 'i', 'u', 'o', 'y'];
Spolgloski := ['b' .. 'h', 'j' .. 't' {itd}];
Krzaczki := [];
Samogloski, Spolgloski, Krzaczki: set of Char;
// ...
begin
Samogloski := ['a', 'e', 'i', 'u', 'o', 'y'];
Spolgloski := ['b' .. 'h', 'j' .. 't' {itd}];
Krzaczki := [];
Wyrażenie [] oznacza zbiór pusty.
Aby dodać lub odjąć elementy zbiorów postępujemy tak jak w matematyce:
Aby dołączyć/wyłączyć jeden element do zbioru możemy posłużyć się funkcjami Include() i Exclude():
Include(Spolgloski, 'm');
Exclude(Samogloski, 'i');
// to samo co:
// Spolgloski := Spolgloski + ['m'];
// Samogloski := Samogloski - ['i'];
Exclude(Samogloski, 'i');
// to samo co:
// Spolgloski := Spolgloski + ['m'];
// Samogloski := Samogloski - ['i'];
Jaka jest różnica między tymi dwoma metodami? Cytując za http://www.borland.pl/tech/optymalizacja_wydajnosci.shtml:
Przyglądając się eksperymentom przeprowadzanym na zbiorach danych (set) można dojść do ciekawych wniosków. Otóż okazuje się że konstrukcja postaci: s := s + ['a'] jest o dwa rzędy wielkości wolniejsza od polecenia Include(s, 'a'). Rozsądnym zatem wydaje się być natychmiastowe zastąpienie wszystkich operacji dodawania pojedynczych elementów do zbioru poprzez zastosowanie polecenia include. Zresztą obserwując implementacje podstawowych modułów Delphi zobaczymy, że wszystkie operacje związane z dodawaniem lub usuwaniem elementu zbioru (np. komponentu) wykonywane są z użyciem poleceń Include i Exclude.
Iloczyny zbiorów zapisujemy:
var
A, B, C: set of Byte;
// ...
begin
A := [1, 2, 3, 4];
B := [3, 4, 5, 6];
C := A * B; // w zbiorze znajdą się elementy: 3, 4
A, B, C: set of Byte;
// ...
begin
A := [1, 2, 3, 4];
B := [3, 4, 5, 6];
C := A * B; // w zbiorze znajdą się elementy: 3, 4
Aby sprawdzić, czy w zbiorze znajduje się dany element, posługujemy się operatorem in:
Do sprawdzania, czy dany zbiór zawiera się w innym zbiorze należy posłużyć się operatorem: <=:
chemik143 dnia 14-02-2008 03:08
Zawsze sie znajdzie ktoś, kto znajdzie pojedynczy błąd i już nie wytrzyma jak nie najedzie..
Jojersztajner dnia 04-04-2006 07:19
świetna znajomość Delphi? ![[diabel]](http://4programmers.net/templates/NewAge/imageset/gfx/smilies/devil.gif)
![[diabel]](http://4programmers.net/templates/NewAge/imageset/gfx/smilies/devil.gif)
timmy dnia 28-02-2006 22:21
"Współgłoski" ??? świetna znajomość Delphi nie zwalnia chyba z poprawnego używania własnego języka nie ??
mlagrass dnia 08-01-2006 07:19
przydaje się...
Marooned dnia 31-12-2005 13:20
to trza było poprawić 

nediam dnia 31-12-2005 12:53
artykulik dobry ale link zawiera niepotrzebny ":" na koncu 



