artykuły

Jak usunąć dowolny element tablicy?

2008-02-23
11:49:00
Avatar
Burak
Strona domowa
Data publikacji:
12:49, 23 February 2008
Potrzebuję usunąć jakiś tam element tablicy, ale nie znalazłem żadnej funkcji która by to robiła. Burak.
Avatar
Lukas
Strona domowa
Data publikacji:
12:50, 23 February 2008
Cóż, nie da się ot tak usunąć dowolnego elementu tablicy ze względu na jej budowę która jest ciągła i nierozłączna. Aby usunąć element musimy więc przesunąć "o jeden w lewo" (w kierunku pierwszego elementu) wszystkie elementy stojące za elementem którego chcemy się pozbyć. Dlatego przy częstych tego typu operacjach lepiej wykorzystać listy, ponieważ na tablicach takie operacje są bardzo wolne. Ale cóż - oto kod: Przed globalnym słówkiem var (tym, przed sekcją implementation), musimy zadeklarować nowy typ tablicowy" type TTablicaInteger = array of integer; Następnie kładziemy na formę jakiś przycisk i komponent Memo (to w celu zobrazowania poprawności działania). Klikamy dwukrotnie na przycisk i wpisujemy kod: procedure TForm1.Button1Click(Sender: TObject); var tablica : TTablicaInteger; i : integer; begin // Alokujemy dynamiczną tablicę na 10 elementów SetLength(tablica, 0); // Wypełniamy tablicę losowymi liczbami Randomize(); for i:=Low(tablica) To High(tablica) Do tablica[i] := Random(1000); // Wypisujemy elementy tablicy for i:=Low(tablica) To High(tablica) Do Memo1.Text := Memo1.Text + IntToStr(tablica[i]) + ', '; // Usuwamy środkowy element tablicy UsunElementTablicy(high(tablica) div 2,tablica); Memo1.Lines.Add(''); Memo1.Lines.Add('Po usunięciu:'); // Wypisujemy elementy tablicy for i:=Low(tablica) To High(tablica) Do Memo1.Text := Memo1.Text + IntToStr(tablica[i]) + ', '; end; Następnie dodajemy nową procedurę "UsunElementTablicy", która będzie działała nam przez referencję (aby przyspieszyć operacje). procedure UsunElementTablicy(nr : integer; var tablica: TTablicaInteger); var i : integer register; // wprowadź zmienną do szybkiego rejestru procesora begin // Jeśli tablica jest pusta to nie rób nic if Length(tablica)=0 Then Exit; // Przesuwamy wszystkie elementy znajdujące się po elemencie o indeksie 'nr' // "w lewo", (w kierunku pierwszego elementu) for i:=nr To high(tablica)-1 Do tablica[i] := tablica[i+1]; // Usuwamy ostatni element tablicy SetLength(tablica,high(tablica)); end;
Avatar
Mimik
Data publikacji:
12:51, 23 February 2008
Oooo... dzięki mnie sie tez przyda.




Zaloguj się aby dodać post.
Dexter