Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Array mit Recordinhalten löschen (https://www.delphipraxis.net/171894-array-mit-recordinhalten-loeschen.html)

Mojito 30. Nov 2012 16:56

Array mit Recordinhalten löschen
 
Hallo liebe Delphi-Freunde,

wie lösche ich am Sinnvollsten einen Array bzw. leere ihn? Bei einem einfachen Records würde ich es einfach mit ='' tun, aber mein Array hat zahlreiche "Unterelemente": array(1..10).Haus, array(1..10).Land, array(1..10).Nation, array(1..10).Name.

Wie lösche ich das gesamte Element an einem bestimmten Index?

Vielen Dank!

Furtbichler 30. Nov 2012 17:04

AW: Array mit Recordinhalten löschen
 
Äh... ohne Quellcode? Keine Ahnung.

Mojito 2. Dez 2012 15:08

AW: Array mit Recordinhalten löschen
 
Hier der Code.

Delphi-Quellcode:
Type
TErfassung = record
    Mitarbeiter: string[25];
    Vorgesetzter: string[25];
    PNummer: string[6];
    Gehaltsstufe: 1..10;

TDataArray = array[1..15] of TErfassung;

var
  Data: TDataArray;
Ich möchte nun Beispielsweise alle Daten in Data[1] löschen und das ohne die einzelnen Unterbereiche wie Data.mitarbeiter anzusteuern. Gibt es ein schlanke Möglichkeit, alle Daten auf einmal an einem Bestimmten Indexwert(wie Data[1]) zu löschen?
Vielen Dank!

Bummi 2. Dez 2012 15:21

AW: Array mit Recordinhalten löschen
 
So lange Du nur ShortStrings wie in Deinem Beispiel verwendest:
Delphi-Quellcode:
  ZeroMemory(@data[1].Mitarbeiter,SizeOf(data[1]));

sx2008 2. Dez 2012 15:45

AW: Array mit Recordinhalten löschen
 
Irgendwie seltsam, dass Delphi Programmierer so blind sind und immer nur Arrays sehen wo in anderen Programmiersprachen (z.B. Python, C#,...Lisp!) schon längst Listen verwendet werden.

Arrays und Listen sind sich sehr ähnlich, aber nur aus Listen kann man schmerzfrei Elemente löschen.
Intern können Listen auch über Arrays nachgebildet werden aber entscheidend ist was dem Programmierer als API angeboten wird:

(dynamische) Arrays
* Wahlfreier Zugriff auf Elemente (über Index)
* nachträgliches Vergrössern/Verkleinern des Array

Listen
* Wahlfreier Zugriff auf Elemente (über Index und Inhalt)
* automatisches Vergrössern/Verkleinern der Liste
* Löschen von Elementen (ohne das Löcher zurückbleiben)
* Einfügen von Elementen an beliebiger Stelle

Popov 2. Dez 2012 16:13

AW: Array mit Recordinhalten löschen
 
Vor allem spätestens sein TObjectList (k. A. ab welchem Delphi). Wobei TList auch nicht viel komplizierter ist, aber TObjectList macht es endgültig Kinderleicht.

DeddyH 2. Dez 2012 16:16

AW: Array mit Recordinhalten löschen
 
Dann muss man aus dem Record aber erst einmal eine Klasse machen.

Popov 2. Dez 2012 16:30

AW: Array mit Recordinhalten löschen
 
Also bei dem oberen Beispiel wäre es kein Akt. record gegen class tauschen, auf property verzichten, der Rest mit TObjectList.

Oder etwas aufwändiger - eine Klasse ableiten.

DeddyH 2. Dez 2012 17:45

AW: Array mit Recordinhalten löschen
 
Oder je nach Delphi-Version eine generische Liste (ich wundere mich, dass das noch niemand vorgeschlagen hat).

Furtbichler 2. Dez 2012 18:11

AW: Array mit Recordinhalten löschen
 
Zitat:

Zitat von sx2008 (Beitrag 1194008)
Irgendwie seltsam, dass Delphi Programmierer so blind sind und immer nur Arrays sehen wo in anderen Programmiersprachen (z.B. Python, C#,...Lisp!) schon längst Listen verwendet werden.

Arrays sind schneller und wenn ich die Schmerzfrei-Lösch-Funktionalität nicht brauche, hänge ich mir keine Liste ans Bein. Warum auch?

Im Übrigen kann man auch mit FaustkeilenArrays trefflich und performant Elemente löschen. Vor allen Dingen kann man damit eins: Lernen, wie es geht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz