AGB  ·  Datenschutz  ·  Impressum  







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

Arrays

Ein Thema von Jacob · begonnen am 18. Apr 2020 · letzter Beitrag vom 19. Apr 2020
Antwort Antwort
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.029 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Arrays

  Alt 18. Apr 2020, 23:26
Ich würde - wie schon beschrieben - die Objekte der Liste direkt in der Listbox referenzieren und beim Löschen das (dann ja bekannte) Objekt aus der Liste löschen. Sollten mehrere Items in einem Durchgang gelöscht werden, nicht vergessen von „hinten nach vorne“ zu iterieren, da durch das Delete die Elemente verschoben werden und dann die Indizes sowie „Count“ nicht mehr passen.
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#2

AW: Arrays

  Alt 19. Apr 2020, 00:02
da durch das Delete die Elemente verschoben werden und dann die Indizes sowie „Count“ nicht mehr passen.
Ja, dass Count so nicht mehr passt, ist ein "merkliches" Problem,
aber wenn du löschst, wann wird da auch der nächste Eintrag übersprungen.

Wenn man sorum arbeitet, dann nehmen man eine der anderen Schleifen (z.B. WHILE)
und darf beim Löschen den Index nicht hochzählen, also Delete ODER Index+1.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.029 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Arrays

  Alt 19. Apr 2020, 12:21
da durch das Delete die Elemente verschoben werden und dann die Indizes sowie „Count“ nicht mehr passen.
Ja, dass Count so nicht mehr passt, ist ein "merkliches" Problem,
aber wenn du löschst, wann wird da auch der nächste Eintrag übersprungen.

Wenn man sorum arbeitet, dann nehmen man eine der anderen Schleifen (z.B. WHILE)
und darf beim Löschen den Index nicht hochzählen, also Delete ODER Index+1.
Daher würde ich bei Löschaktionen in Listen immer von "Count-1" nach 0 durchiterieren. Zumindest habe ich das so "gelernt".
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#4

AW: Arrays

  Alt 19. Apr 2020, 12:53
Jo, weil es mehrere Voreile hat.
  • weniger zu überlegen, in der einfacheren Schleife
  • beim FOR sogar mit einen schöneren ENDE .... immer "konstant" 0 (oder 1), statt einer Variable
    • das FOR cached sogar das Ende, also kopiert sich den Wert zu Begin in eine Varialbe, anstatt immer wieder die Funktion Count/Length/High zu verwenden
    • drum knallt es dann auch so schön, was gut ist, damit man die übersprungenen Einträge sofort bemerkt
    • und falls nur ein Eintrag gelöscht wird, dann merkt man auch sofort das vergessene BREAK
  • und in dem Array / der Liste muß bei "mehreren" Löschungen weniger Speicher kopiert werden, da hinten das Ende immer kürzer wird.


OK, bei verketteten Listen ist Reihenfolge egal, da geht man einfach der Kette entlang, wobei des hier in der Doppelkette vermutlich noch einfacher geht.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (19. Apr 2020 um 14:29 Uhr)
  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 22:10 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-2025 by Thomas Breitkreuz