Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mehrdimensionales dynamisches Array, Element löschen (https://www.delphipraxis.net/158426-mehrdimensionales-dynamisches-array-element-loeschen.html)

schwa226 17. Feb 2011 09:55

AW: Mehrdimensionales dynamisches Array, Element löschen
 
:dp:

Special THX to himitsu!

Ich habe die erste Methode probiert und sie geht ohne Probleme!
Hätte mir nicht gedacht das, dass so kompliziert werden würde!

Wenn sich aber mein TIntArray nochmal ändern sollte werde ich dann wahrscheinlich doch noch auf TList ausweichen.

mleyen 17. Feb 2011 09:55

AW: Mehrdimensionales dynamisches Array, Element löschen
 
Doh, ja TList wär echt die bessere Wahl.
Bzw:
Delphi-Quellcode:
type
  TIntArray = array of Integer;
  PIntArr = ^TIntArray;
  TIntArrayArray = array of PIntArr;
 
  procedure DeleteArrayElement(var AArray: TIntArrayArray; const AIndex: Integer);
  begin      
    Dispose(AArray[AIndex]);
    Move(AArray[AIndex + 1], AArray[AIndex], SizeOf(AArray[0]) * (Length(AArray) - AIndex - 1)); //Dahinterliegende Daten aufrücken
    SetLength(AArray, Length(AArray) - 1); // Länge kürzen
  end;

Deep-Sea 17. Feb 2011 09:56

AW: Mehrdimensionales dynamisches Array, Element löschen
 
Zitat:

Zitat von schwa226 (Beitrag 1082402)
Ich könnte ja auch ein Record statt der Class machen.
Dann bei jedem neuen Element:
GetMem(MyElemnt, SizeOf(TArrayRecord));
List.Add(MyElemnt);

Wobei mir das mit GetMem weniger gefällt.

  1. Anstatt GetMem sollte man auch New (und Dispose) verwenden.
  2. Quatsch. Du musst kein Speicher reservieren?! Einfach hinzufügen und Fertig.

himitsu 17. Feb 2011 10:01

AW: Mehrdimensionales dynamisches Array, Element löschen
 
Zitat:

Zitat von mleyen (Beitrag 1082405)
Bzw:

Delphi-Quellcode:
type
  TIntArray = array of Integer;
  PIntArr = ^TIntArray;
  TIntArrayArray = array of PIntArr;
 
  procedure DeleteArrayElement(var AArray: TIntArrayArray; const AIndex: Integer);
  begin      
    Dispose(AArray[AIndex]);
    Move(AArray[AIndex + 1], AArray[AIndex], SizeOf(AArray[0]) * (Length(AArray) - AIndex - 1));
    FillChar(AArray[High(AArray)], SizeOf(AArray[0]), 0);
    SetLength(AArray, Length(AArray) - 1);
  end;
FillChar/ZeroMemory nicht vergessen, da sonst das letzte Feld doppelt vorkommt, dann von SetLength freigegeben würde und somit das vorletzte (nun letzte) Feld auf nicht mehr existierende Daten zeigen könnte.

mleyen 17. Feb 2011 10:10

AW: Mehrdimensionales dynamisches Array, Element löschen
 
SetLength gibt Sachen frei? Wär mir neu :cyclops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr.
Seite 2 von 2     12   

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