AGB  ·  Datenschutz  ·  Impressum  







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

In einem dyn. Array Werte verschieben

Ein Thema von turboPASCAL · begonnen am 21. Mär 2009 · letzter Beitrag vom 21. Mär 2009
Antwort Antwort
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

In einem dyn. Array Werte verschieben

  Alt 21. Mär 2009, 05:41
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;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: In einem dyn. Array Werte kopieren

  Alt 21. Mär 2009, 06:35
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.

Grüße, Matze
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: In einem dyn. Array Werte kopieren

  Alt 21. Mär 2009, 06:50
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#4

Re: In einem dyn. Array Werte verschieben

  Alt 21. Mär 2009, 07:24
High(a[i])
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: In einem dyn. Array Werte kopieren

  Alt 21. Mär 2009, 07:31
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#6

Re: In einem dyn. Array Werte kopieren

  Alt 21. Mär 2009, 07:45
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.
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.
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: In einem dyn. Array Werte verschieben

  Alt 21. Mär 2009, 15:01
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. )
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;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#8

Re: In einem dyn. Array Werte verschieben

  Alt 21. Mär 2009, 16:22
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. )
Sorry, die anderen Buchstaben sind mir nicht Eingefallen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: In einem dyn. Array Werte verschieben

  Alt 21. Mär 2009, 16:33
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 von turboPASCAL:
Zitat:
(Wenn die Prozedur nicht A heißen würde. )
Sorry, die anderen Buchstaben sind mir nicht Eingefallen.
Ging ja nur darum, dass das Beispiel so deshalb nicht geht.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:23 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