AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Im Array Element löschen

Ein Thema von G4schi · begonnen am 8. Sep 2017 · letzter Beitrag vom 8. Sep 2017
Antwort Antwort
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
773 Beiträge
 
#1

AW: Im Array Element löschen

  Alt 8. Sep 2017, 14:20
for z:=Length(Kontaktliste)-1 downto 0 do

Mein zweites Array wird nun verkürzt, aber das letzte Element aus dem ersten Array nimmt es noch immer nicht mit.
Du benutzt immer Kontaktliste_2[z].Anrede := Kontaktliste[z].Anrede; etc., aber bis zu dem zu löschenden Eintrag muss es lauten Kontaktliste_2[z - 1].Anrede := Kontaktliste[z].Anrede; . Der Index muss dort ja dort unterschiedlich sein, da ein Element "fehlt".

Edit: Und setze die Länge besser vor der Schleife mit SetLength(Kontaktliste_2, Length(Kontaktliste)-1);

Geändert von Olli73 ( 8. Sep 2017 um 14:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.152 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Im Array Element löschen

  Alt 8. Sep 2017, 17:15
for z:=Length(Kontaktliste)-1 downto 0 do

Mein zweites Array wird nun verkürzt, aber das letzte Element aus dem ersten Array nimmt es noch immer nicht mit.
Du benutzt immer Kontaktliste_2[z].Anrede := Kontaktliste[z].Anrede; etc., aber bis zu dem zu löschenden Eintrag muss es lauten Kontaktliste_2[z - 1].Anrede := Kontaktliste[z].Anrede; . Der Index muss dort ja dort unterschiedlich sein, da ein Element "fehlt".

Edit: Und setze die Länge besser vor der Schleife mit SetLength(Kontaktliste_2, Length(Kontaktliste)-1);
Oder

Kontaktliste_2[High(Kontaktliste_2)].Anrede := Kontaktliste[z].Anrede;
und noch besser 1x nur

 Setlength(KontaktListe_2,length(Kontaktliste)-1); oder
Delphi-Quellcode:
For z:=i+1 to high(KontaktListe_2) do
  begin
    KontaktListe_2[z-1] := KotaktListe_2[z];
  end;
oder ich gehe mal von Record aus...

Delphi-Quellcode:
Move(KontaktListe_2[I+1],KontaktListe_2[I],(Length(KontaktListe_2)-I) * Sizeof(KontaktListe[0])); // Sizeof(Type)
Setlength(KontaktListe_2,Length(KontaktListe_2)-1);
Das würde doch ein Lerneffekt haben... und schneller als eine TList ist es auch...

Mavarik

Geändert von Mavarik ( 8. Sep 2017 um 17:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Im Array Element löschen

  Alt 8. Sep 2017, 20:03
Oder mit einem Array: Man kopiert den Record des letzten Elements auf das zu löschende Element und "schneidet" das letzte Elemente vom Array ab.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Im Array Element löschen

  Alt 8. Sep 2017, 22:03
Eine generische Lösung wäre beispielsweise:
Delphi-Quellcode:
class procedure TArrayHelper.Delete<T>(var A: TArray<T>; Index: Integer);
var
  I: Integer;
begin
  for I := Index to High(A) - 1 do
  begin
    A[I] := A[I + 1];
  end;
  SetLength(A, Length(A) - 1);
end;

class procedure TArrayHelper.Insert<T>(var A: TArray<T>; Index: Integer; const Item: T);
var
  I: Integer;
begin
  SetLength(A, Length(A) + 1);
  for I := High(A) - 1 downto Index do
  begin
    A[I + 1] := A[I];
  end;
  A[Index] := Item;
end;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.152 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Im Array Element löschen

  Alt 8. Sep 2017, 22:27
Oder mit einem Array: Man kopiert den Record des letzten Elements auf das zu löschende Element und "schneidet" das letzte Elemente vom Array ab.
klar, wenn die ggf. sortiere Reihenfolge egal ist, ist das noch schneller...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz