Delphi-PRAXiS
Seite 3 von 3     123   

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

Breager 7. Mär 2012 21:01

AW: Array Zeile löschen
 
Zitat:

Zitat von DeddyH
Oder man macht Klassen draus und... hatten wir das nicht schon?

Es ging mir ja nur darum, dass es bei der von mir vorgeschlagenen Variante möglich ist, einzelne Werte des Records direkt zu ändern. Das New und Dispose brauche ich doch nur beim Hinzufügen (Add) oder Entfernen (Delete) von Items bzw. vor dem Freigeben (Free) der Liste, nicht jedoch beim Sortieren der Liste.

Ich glaube, im Endeffekt hat jede mögliche/hier genannte Lösung ihre Vor- und Nachteile. Jetzt muss man sich nur noch das rauspicken, was einem am meisten zusagt ;-)

Lg

VkPenguin 7. Mär 2012 22:09

AW: Array Zeile löschen
 
... erst einmal vielen lieben Dank für eure Hilfe und Freundlichkeit - zuerst hab ich zwar nicht ganz verstanden, wovon ihr eigentlich redet, ich konnte mich aber dann gut anhand der Codebeispiele einfinden, danke noch einmal für die Mühe an dieser Stelle. Ich mach mich dann mal an den Umbau :) Melde mich, wenn es größere Probleme gibt oder wenn es geklappt hat.

*Edit* Funktioniert soweit wie ich gekommen bin gut; eine Frage hätte ich aber - wenn ich zwei Einheiten der Liste vergleichen will, also zwei gleichzeitig brauche, muss ich dann auch zwei temporäre "Gegner"-Variablen haben?
*Edit2* Hm, bekomme folgende Fehlermeldung:

---------------------------
Anwendungsfehler
---------------------------
Exception EArgumentOutOfRangeException in Modul SpaceInvaders042.exe bei 000B6205.

Argument out of range.
---------------------------
OK
---------------------------

Ich denke mal, dass bedeutet, dass die Liste nur sagen wir mal drei Einträge hat und ich nach dem vierten Frage..? Wir die Liste mit dem ".add"-Befehl nicht automatisch um eins erweitert? Das hatte ich so verstanden..
*Edit3* wenn ich es so "For I:=1 To Schussanzahl-1 Do" mache, geht es scheinbar. Fängt die Liste also schon bei 0 an zu zählen? Aber warum funktioniert dann der erste Schuss nicht?
*Edit4*...erst Denken.. mit
Delphi-Quellcode:
For I:=0 To [...]
geht es wunderbar. Werde mich am Wochenende weiter damit beschäftigen und (voraussichtlich) Rückmeldung geben. Danke nocheinmal!

himitsu 7. Mär 2012 23:39

AW: Array Zeile löschen
 
Das Freigeben macht eine TObjectList von selber, wenn man es ihr sagt.

Delphi-Quellcode:
type
  TSimpleObjectList<T: class> = class(TList<T>)
  protected
    procedure Notify(const Value: T; Action: TCollectionNotification); override;
  public
    function Add: T; overload;
    function Insert(Index: Integer): T; overload;
  end;

function TSimpleObjectList<T>.Add: T;
begin
  Result := T.Create;
  inherited Add(Result);
end;

function TSimpleObjectList<T>.Insert(Index: Integer): T;
begin
  if (Index < 0) or (Index > Count) then
    Items[Index];
  Result := T.Create;
  inherited Insert(Index, Result);
end;

procedure TSimpleObjectList<T>.Notify(const Value: T; Action: TCollectionNotification);
begin
  try
    inherited;
  finally
    if Action = cnRemoved then
      Value.Free;
  end;
end;
Nunja, eine kleine Erweiterung und schon läßt sich auch mit einer TObjectList<T> angenehm arbeiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 Uhr.
Seite 3 von 3     123   

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