AGB  ·  Datenschutz  ·  Impressum  







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

Löschen einer Generischen Liste

Ein Thema von Mokus · begonnen am 13. Feb 2014 · letzter Beitrag vom 13. Feb 2014
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Löschen einer Generischen Liste

  Alt 13. Feb 2014, 09:31
Delphi-Version: 5
Delphi-Quellcode:
while i <= result.Count - 1 do
  begin
    a := 0;
    ElementeZumLoeschen := Tlist<integer>.create;
    repeat
      if result[i].isDominated(result[a]) then
      begin
        if ElementeZumLoeschen.IndexOf(a) = -1 then
        begin
          ElementeZumLoeschen.Add(a);

        end;
      end;
      if result[i].isDominated(result[result.Count - 1 - a]) then
      begin
        if ElementeZumLoeschen.IndexOf(result.Count - 1 - a) < 0 then
          ElementeZumLoeschen.Add(result.Count - 1 - a);
      end;

      inc(a);
    until (a > result.Count div 2);

    for a := 0 to ElementeZumLoeschen.Count - 1 do
      result.Delete(ElementeZumLoeschen[a]- a );

    freeandnil(ElementeZumLoeschen);

    inc(i);

  end;

bei den oben zu sehenden Code habe ich eine Liste, wenn folgende bestimmung erfüllt sind, merke ich mir den Index.
in einer For schleife laufe ich dann die Inhalte durch, mti den INdexen die gelöscht werden soll.
Problem; ich bekomm eine outofrange.
Sieht wer aufm Blick, was dort schief gelaufen ist ?

Oder gibt es noch ne andere Möglichkeit?

( laut DP suche, eine toarray Methode. Da ich dort aber eine Kopie meiner Liste erstelle, würde ich dies gern vermeinden)
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Löschen einer Generischen Liste

  Alt 13. Feb 2014, 09:38
.. beim Löschen ist es von Vorteil die Liste rückwärts zu durchlaufen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Löschen einer Generischen Liste

  Alt 13. Feb 2014, 09:41
Ich steig bei dem Code zwar nicht ganz durch (und Delphi 5 mag ich auch nicht glauben), aber wenn die Liste die Elementindizes der anderen Liste aufnimmt, solltest Du diese rückwärts durchlaufen. Und wieso ziehst Du a wieder ab beim Löschen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Löschen einer Generischen Liste

  Alt 13. Feb 2014, 09:41
like :


Delphi-Quellcode:
   for a := ElementeZumLoeschen.Count - 1 downto 0 do
      result.Delete(ElementeZumLoeschen[a]);

@edit

ich zähl ab, da die Liste doch kleiner wird, oder ist ´sie nicht dynamissch ?
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Löschen einer Generischen Liste

  Alt 13. Feb 2014, 09:46
Deine For-Schleife schaut nur ein einziges mal, bis wohin sie zählen soll. In z.B. C++ ist das anders, da kannst du eine Bedingung angeben.

Hier ein Minimalbeispiel, schau dir doch im Debugger mal an, wie myList immer kleiner wird, dein Index immer größer und dann kracht es:

Delphi-Quellcode:
procedure TForm19.FormCreate(Sender: TObject);
var
   myList: TList<Integer>;

   myListIndex: Integer;
begin

   myList := TList<Integer>.Create();
   myList.AddRange([1,2,3,4,5,6,7,8,9,10]);

   for myListIndex := 0 to Pred(myList.Count) do
      if (myListIndex mod 2 = 0) then
         myList.Delete(myListIndex);

end;

PS: Was du genau da genau machst habe ich aber nach mehreren Anläufen immer noch nicht verstanden. Variablennamen wie a und i sind zwar schnell getippt, aber ich komme ehrlich gesagt immer noch ganz hinterher. Willst du aus einer Liste schlichtweg alle Dinge entfernen, auf welche eine bestimmte Eigenschaft zutrifft?

Geändert von Der schöne Günther (13. Feb 2014 um 09:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Löschen einer Generischen Liste

  Alt 13. Feb 2014, 09:55
PS: Was du genau da genau machst habe ich aber nach mehreren Anläufen immer noch nicht verstanden. Variablennamen wie a und i sind zwar schnell getippt, aber ich komme ehrlich gesagt immer noch ganz hinterher. Willst du aus einer Liste schlichtweg alle Dinge entfernen, auf welche eine bestimmte Eigenschaft zutrifft?
Ja, das ist mein Ziel...
und a / i sind laufvariablen.

Sollte ich da echt laufvariable 1 und 2 hinschreiben ?


[EDIT]

ich weiß, das die liste kleiner wird.
Ich weiß auch das die Indexe größer sind, und das es dann kracht.
Nun ist aber, wie lautet der weg um das zu umgehen ^^

[/edit]
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Löschen einer Generischen Liste

  Alt 13. Feb 2014, 10:00
Was ich nicht verstehe: wozu erst eine zweite Liste anlegen, du kannst die ursprüngliche doch direkt verwenden, oder übersehe ich da etwas?
Delphi-Quellcode:
for i := Liste.Count - 1 downto 0 do
  if Bedingung(Liste[i]) then
    Liste.Delete(i);
oder auch
Delphi-Quellcode:
i := 0;
while i < Liste.Count do
  begin
    if Bedingung(Liste[i]) then
      Liste.Delete(i)
    else
      inc(i);
  end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Löschen einer Generischen Liste

  Alt 13. Feb 2014, 10:14
okay,
vielleicht sollte ich noch ein wenig zum Result sagen.

Das result ist eine eine Object list.
In dessen Objekte sind auch noch Listen;
und diese muss ich verlgeichen.

sollte ich also daher einfach was in der For schleife rauslöschen, führt das zur sofortiger OutOfRange.

Daher merke ich mir zuerst dessen Idexe,
sollte dann ein Object, mit allen anderen vergliechen sind, dann lösch ich diese erst raus.

Deswegen auch verschaltete schleifen...
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Löschen einer Generischen Liste

  Alt 13. Feb 2014, 10:32
Erstell dir doch einfach eine Kopie der Liste und entferne dann aus dieser Kopie einfach direkt alles, was du entfernen möchtest.
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Löschen einer Generischen Liste

  Alt 13. Feb 2014, 10:33
das hat ich auch schon überlegt. Dachte es würde eine elegantere Methode geben.
Aber k.
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:20 Uhr.
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