Announcement

Collapse
No announcement yet.

Kann man Elemente aus dynamischen Arrays loeschen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kann man Elemente aus dynamischen Arrays loeschen?

    Hallo miteinander,

    Gibt es einen Befehl mit dem man Elemente aus einem dynamischen Array loeschen kann? Ich selbst habe das Problem mit einem 2. Array (ebenfalls dynamaisch) geloest, das als Puffer fuer die zu erhaltenen Werte genutzt wird. Spaeter wird das 'Original Array' dann mittels setLength gekuerzt und die Werte aus dem Puffer Array zurueck gelesen. Dass ganze finde ich aber sehr umstaendlich und wuerde es gern einfacher machen.

    Gruss und Dank

    HartmuT

  • #2
    Wegen dem Speicheraufbau eines Array kann man nicht ein Element aus der Mitte löschen, ohne eine Menge CPU-Zeit durch Array-(Speicher)-Neuorganisation zu verwenden. Wenn du oft Werte aus der Mitte eines Array löschen musst, würde ich stattdessen eine Liste verwenden z.B. das TList-Objekt. Bei einer Liste werden beim Löschen eines Elements nur ein (...oder zwei, je nach Listenart) Zeiger (4 Byte) verbogen, die anderen Elemente bleiben an ihrer alten Stelle. (Listen sind zwar etwas komplizierter, dafür in den meisten Fällen aber auch schneller wie ein Array beim Löschen/Einfügen usw

    Comment


    • #3
      Also ich hatte das problem auch, da bei mir aber die reihenfolge der Array-Elemente nicht wichtig war, hab ich das zu löschende Element einfach mit dem letzten der des Arrays überschrieben und dann das Array um eins verkürzt.
      Ist zwar nicht besonders "hübsch" diese Aktion, aber es funktioniert und geht schnell.

      bis denn
      Tobia

      Comment


      • #4
        Hi Tobias

        Deine Methode ist sehr gut und eine der effektivsten. (hat mit hübsch nichts zu tun). Eine leicht schnellere Version würde in den Daten ein Gelöscht-Flag vorsehen und dieses setzen. ABER alle nachfolgenden funktionen müssten solche Records erkennen und ignorieren. Eine andere Version die mit "unbekannten" Recordarrays arbeitet könnte ein zweite "Indexarray" verwalten, jeder Eintrag gibt an ob aktiv oder gelöscht. Auf jeden Fall wäre ein solches Handling wesentlich schneller als jede dynamische Liste, sollte ABER nur eine kurze "Lebenszeit" besitzen. Ich persönlich würde für sehr häufig benutze und oft wiederverwendete Daten, eine TList auf TMyObjects nutzen. Diese sind leichter wartbar, sicherer Sources und nach Jahren noch verständlich )

        Gruß Hage

        Comment

        Working...
        X