AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Array Zeile löschen

Ein Thema von VkPenguin · begonnen am 2. Mär 2012 · letzter Beitrag vom 7. Mär 2012
Antwort Antwort
Seite 2 von 3     12 3   
Popov
(Gast)

n/a Beiträge
 
#11

AW: Array Zeile löschen

  Alt 6. Mär 2012, 09:20
Da Ganze ist ein Dilemma. Mit Array zu arbeiten ist für Anfänger einfacher, da man die Vorgänge logisch nachvollziehen kann. Oft wollte man am Anfang auch nur eine Kleinigkeit und plötzlich hat meine ein mächtiges Array-Record an der Backe. Die Verwaltung ist aber dann etwas komplexer. Eine Klasse ist von der Arbeit am Anfang ähnlich, bringt später unheimlich Vorteile, für einen Anfänger evtl. noch schwer nachvollziehbar.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Array Zeile löschen

  Alt 6. Mär 2012, 09:27
Mit Array zu arbeiten ist für Anfänger einfacher, da man die Vorgänge logisch nachvollziehen kann.
Bei dynamischen Arrays würde ich das aber nicht unterschreiben, da spielen Listen IMO alle Trümpfe aus (Add, Delete etc. gegenüber SetLength, Move usw.).
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
Breager

Registriert seit: 18. Feb 2012
40 Beiträge
 
#13

AW: Array Zeile löschen

  Alt 6. Mär 2012, 19:09
Zitat von himitsu:
Das Ändern einzelner Werte eines Records ist nicht (sehr unpraktsich) änderbar.
Was spricht gegen folgendes?
Delphi-Quellcode:
begin
...
TGegnerRecord(Gegnerliste[i]^).Name:='Neuer Gegner';
TGegnerRecord(Gegnerliste[i]^).PosX:=10;
...
end;
Die Klasse muss man auch wieder sauber freigeben. Habe mal im Netz ein Beispiel (als Empfehlung) gefunden, mit einem wunderschönen Speicherleck. Leider weiss ich nicht mehr wo.
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#14

AW: Array Zeile löschen

  Alt 7. Mär 2012, 14:28
Hallo,
habe leider bisher keine Zeit gefunden, alle Beiträge zu lesen und zu überdenken; nur kurz als Antwort: Meine Version ist Delphi 2009, entschuldigt, wusste nicht, dass das wichtig ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.664 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Array Zeile löschen

  Alt 7. Mär 2012, 15:11
Hast du schonmal mit den Generics gearbeitet?

GegnerListe[0] liefert dort den Record, genauer eine Kopie des Records und keinen Zeiger.

Delphi-Quellcode:
type
  TGegnerRecord = record
   Name:AnsiString;
   PosX:Integer;
   PosY:Integer;
   {...}
  end;

var
  Gegner: TGegnerRecord;
  GegnerListe: TList<TGegnerRecord>;

GegnerListe := TList<TGegnerRecord>.Create;


Gegner.Name := 'ich';
Gegner.PosX := 123;
...
GegnerListe.Add(Gegner);


Label1.Caption := GegnerListe[0].Name:


GegnerListe[0].PosX := 456; // geht nicht, auch wenn der Compiler, in älteren Delphi-Versionen, keine Warnung/Fehlermeldung anzeigt


GegnerListe.Free;
Vorteil ist zwar, daß hier delphi die komplette Speicherverwaltung übernimmt, innerhalb der Liste und auch für die Einzelrecords.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#16

AW: Array Zeile löschen

  Alt 7. Mär 2012, 15:19
das Ändern ist aber nicht wirklich problematisch
Delphi-Quellcode:
var
  i: Integer;
begin
  GegnerListe := TList<TGegnerRecord>.Create;

  for i := 1 to 100 do
  begin
    Gegner.Name := 'ich' + IntToStr(i);
    Gegner.PosX := i;
    GegnerListe.Add(Gegner);
  end;

  Gegner := GegnerListe[10];
  Gegner.PosX := 999;
  Gegner.Name := 'geändert';
  GegnerListe[10] := Gegner;
  Showmessage(GegnerListe[10].Name + '-' + IntToStr(GegnerListe[10].PosX));
  GegnerListe.Free;
end;
benötigt generics.collections in den uses.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.664 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Array Zeile löschen

  Alt 7. Mär 2012, 15:28
Jupp, wenn man den Record vorher rausnimmt/rauskopiert und dann quasi "komplett" ersetzt.
Nur eben Einzeiler, zum Ändern eines klitzekleinen Wertes, sind standardmäßig nicht möglich.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Breager

Registriert seit: 18. Feb 2012
40 Beiträge
 
#18

AW: Array Zeile löschen

  Alt 7. Mär 2012, 17:16
Bei Generics muss ich leider aus Kompatibilitätsgründen passen.

Bei der von mir vorgeschlagenen Variante kann man jedoch, wie schon oben geschrieben, einzelne Werte ohne Probleme direkt ändern:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
 TGegnerRecord(Gegnerliste[0]^).Name:='Neuer Gegner';
 TGegnerRecord(GegnerListe[0]^).PosX:=100;
end;
Oder spricht etwas dagegen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.664 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Array Zeile löschen

  Alt 7. Mär 2012, 18:30
Nein, das geht bei der generischen TList<T> nicht, welche direkt die Records enthält.

Wenn man eine TList mit Zeigern auf "Gegner"-Records oder mit einem Gegner-Objekten befüllt hat, dann geht es, so wie du sagst.
Nur daß man andersrum wohl noch besser erkennt, warum es dort geht.
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  PGegnerRecord(Gegnerliste[0])^.Name:='Neuer Gegner';
  PGegnerRecord(GegnerListe[0])^.PosX:=100;
end;
Nur muß man hier eben überall selber noch das New und Dispose aufrufen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 7. Mär 2012 um 18:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Array Zeile löschen

  Alt 7. Mär 2012, 18:45
Oder man macht Klassen draus und... hatten wir das nicht schon?
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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf