Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi In einem dyn. Array Werte verschieben (https://www.delphipraxis.net/131247-einem-dyn-array-werte-verschieben.html)

turboPASCAL 21. Mär 2009 05:41


In einem dyn. Array Werte verschieben
 
Moin,

habe mal ne Nachfrage, so einfach ist es nicht gelle ?
Ich muss also das gesammte Array "durchkauen".

Delphi-Quellcode:
var
  a: array of array of integer;

procedure A;
var
  i: integer;
begin
  for i := 0 to High(a)-1 do
      a[i] := a[i+1];
end;

Matze 21. Mär 2009 06:35

Re: In einem dyn. Array Werte kopieren
 
Hi Matti,

ich glaube die "-1" bei dir ist überflüssig/falsch.

Hast du es mal mit Delphi-Referenz durchsuchenCopy versucht: Array kopieren? Wobei ich nicht weiß, ob das auch mit mehrdimensionalen Arrays funktioniert.

Edit: Da du das nicht 1:1 kopierst, sondern verschiebst (wenn ich's richtig sehe), passt es doch mit der "-1". Eigentlich ist das ja kein richtiges Kopieren, was du möchtest. :gruebel:

Grüße, Matze

turboPASCAL 21. Mär 2009 06:50

Re: In einem dyn. Array Werte kopieren
 
Ja, Verschieben trifft's eher.

ich wollte mir die zweite For-Schleife ersparen:

Delphi-Quellcode:
procedure A;
var
  i, n: integer;
begin
  for i := 0 to High(a)-1 do
    for n := 0 to 2 do
      a[i, n] := a[i+1, n];
end;
wo ich wohl nicht herum kommen werde. Leider ist mir entfallen wie ich auf das zweite Array im Array ;)
per High() zugreifen kann. :gruebel:

Cyf 21. Mär 2009 07:24

Re: In einem dyn. Array Werte verschieben
 
Delphi-Quellcode:
High(a[i])

jaenicke 21. Mär 2009 07:31

Re: In einem dyn. Array Werte kopieren
 
Zitat:

Zitat von turboPASCAL
Ja, Verschieben trifft's eher.

ich wollte mir die zweite For-Schleife ersparen:

Ersparen könntest du sie, wenn alle inneren Arrays genauso lang wären. Dann wäre das eine simple Speicheroperation, da es sich um Integers handelt.

Da du aber nach High gefragt hast, ist das wohl hier nicht der Fall. Bei verschieden langen inneren Arrays wäre das direkte Verschieben zwar auch möglich, aber da muss man viel genauer schauen was man dabei tut.

Cyf 21. Mär 2009 07:45

Re: In einem dyn. Array Werte kopieren
 
Zitat:

Zitat von jaenicke
Ersparen könntest du sie, wenn alle inneren Arrays genauso lang wären. Dann wäre das eine simple Speicheroperation, da es sich um Integers handelt.

Hmm irgendwie nicht, oder ich verstehs falsch. :wink:
Das ginge nur bei einem statischen Array, bei dynamischen, mehrdimensionalen Arrays ist nicht gegeben, dass die zweite Dimension hintereinander im Speicher liegt, da die erste nur aus Zeigern besteht.

jaenicke 21. Mär 2009 15:01

Re: In einem dyn. Array Werte verschieben
 
Zitat:

Zitat von Cyf
Das ginge nur bei einem statischen Array, bei dynamischen, mehrdimensionalen Arrays ist nicht gegeben, dass die zweite Dimension hintereinander im Speicher liegt, da die erste nur aus Zeigern besteht.

Stimmt, darüber hatte ich nicht weiter nachgedacht.

Eine zweite Schleife sollte aber auch nicht nötig sein, das sollte eigentlich gehen. (Wenn die Prozedur nicht A heißen würde. :D)
Zitat:

Zitat von turboPASCAL
Delphi-Quellcode:
var
  a: array of array of integer;

procedure A;
var
  i: integer;
begin
  for i := 0 to High(a)-1 do
      a[i] := a[i + 1];
end;


turboPASCAL 21. Mär 2009 16:22

Re: In einem dyn. Array Werte verschieben
 
Zitat:

Eine zweite Schleife sollte aber auch nicht nötig sein, das sollte eigentlich gehen.
Nö, leider macht es dies allen Anschein nach nicht.

Zitat:

(Wenn die Prozedur nicht A heißen würde. :-D )
Sorry, die anderen Buchstaben sind mir nicht Eingefallen. ;)

jaenicke 21. Mär 2009 16:33

Re: In einem dyn. Array Werte verschieben
 
Zitat:

Zitat von turboPASCAL
Zitat:

Eine zweite Schleife sollte aber auch nicht nötig sein, das sollte eigentlich gehen.
Nö, leider macht es dies allen Anschein nach nicht.

Also bei mir geht das:
Delphi-Quellcode:
procedure TForm164.Button1Click(Sender: TObject);
var
  a: array of array of Integer;
  i, j: Integer;
  tmp: String;
begin
  SetLength(a, 3);
  SetLength(a[0], 2);
  SetLength(a[1], 4);
  SetLength(a[2], 5);
  for i := 0 to High(a) do
    for j := 0 to High(a[i]) do
      a[i, j] := i + j shl 4;
  a[0] := a[2];
  tmp := '';
  for i := 0 to High(a) do
  begin
    for j := 0 to High(a[i]) do
      tmp := tmp + ', ' + IntToStr(a[i, j]);
    tmp := tmp + #13#10;
  end;
  ShowMessage(tmp);
end;
Zitat:

Zitat von turboPASCAL
Zitat:

(Wenn die Prozedur nicht A heißen würde. :-D )
Sorry, die anderen Buchstaben sind mir nicht Eingefallen. ;)

Ging ja nur darum, dass das Beispiel so deshalb nicht geht. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:21 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