AGB  ·  Datenschutz  ·  Impressum  







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

Array aufteilen

Ein Thema von Luckie · begonnen am 20. Mär 2006 · letzter Beitrag vom 20. Mär 2006
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Array aufteilen

  Alt 20. Mär 2006, 11:11
Ich habe ein dynamisches Array, dieses müsste ich in 'Sub'-Arrays zerlegen. Wie mache ich das am günstigsten?
Beispiel:
Delphi-Quellcode:
var
  Range : TStringArray;
  SubRange : array of TStringArray;

begin
  setlength(SubRange, MAXTHREADS);
  for i := 0 to MAXTHREADS - 1 do
  begin
    SubRange[i] := ???
  end;
Range ist das dynamische Array welches ich in die Arrays SubRange zerlegen will.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#2

Re: Array aufteilen

  Alt 20. Mär 2006, 11:39
Wenn Range danach leere Strings enthalten darf, dann könntest du ja einfach die "Pointer" per Move rübercopieren und natürlich Range per FillChar auf 0 setzen, da es ja sonst nette Probleme der StringReferenzierung gibt ._.
(falls ja, könnte ich auch schnell mal 'nen winzigen DemoCode zusammenstellen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Array aufteilen

  Alt 20. Mär 2006, 11:41
Hallo Michael,

du hast kein Zerlegungskriterium angegeben, aber Copy() könnte dir behilflich sein:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  range: TStringDynArray;
  subRanges: array of TStringDynArray;
  i: Integer;
begin
  SetLength(range, 12);
  for i := Low(range) to High(range) do
    range[i] := 'Test-' + RandomStr(2);

  SetLength(subRanges, 4);
  for i := Low(SubRanges) to High(subRanges) do
    subRanges[i] := Copy(range, i * 3, 3);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#4

Re: Array aufteilen

  Alt 20. Mär 2006, 11:44
stimmt ja, COPY ging ja auch bei Arrays ... warum vergeß ich dat ständig nur
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Array aufteilen

  Alt 20. Mär 2006, 11:50
Es gibt kein, bis auf die Tatsache, dass die Reihenfolge erhaklten bleiben sollte.

@marabu: Warum wird i ausgerechnet mit 3 multipliziert und warum die Länge 3?

@himitsu: Ja, ich glaube, das ist es. Besten Dank.

Grml. Warum fehtl der Code aufeinmal in himitsus Posting?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#6

Re: Array aufteilen

  Alt 20. Mär 2006, 11:53
hatte erst mabarus Code falsch verstanden, und weil unsere Codes sich ja "fast" glaichen meinen dann wieder gelöscht ^_^

Delphi-Quellcode:
SetLength(subRanges, (Length(Ranges) - 1) div MaxRange + 1);
for i := 0 to High(subRanges) do
  subRanges[i] := Copy(Range, i * MaxRange, MaxRange);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Array aufteilen

  Alt 20. Mär 2006, 12:41
So muss es heißen:
Delphi-Quellcode:
setlength(SubRange, MAXTHREADS);
len := (length(Range)-1) div MAXTHREADS + 1;
for i := 0 to MAXTHREADS - 1 do
begin
  setlength(SubRange[i], len);
  SubRange[i] := copy(Range, i * len, len);
  New(ThreadParams);
  SetLength(ThreadParams.Range, length(SubRange[i]));
  ThreadParams.Range := SubRange[i];
  CloseHandle(BeginThread(nil, 0, @PingThread, ThreadParams, 0, ThreadID));
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#8

Re: Array aufteilen

  Alt 20. Mär 2006, 12:57
Nicht so?
Delphi-Quellcode:
len := (Length(Range) - 1) div MAXTHREADS + 1;
for i := 0 to (Length(Range) - 1) div len do
begin
  New(ThreadParams);
  ThreadParams^.Range := Copy(Range, i * len, len);
  CloseHandle(BeginThread(nil, 0, @PingThread, ThreadParams, 0, ThreadID));
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Array aufteilen

  Alt 20. Mär 2006, 13:02
Zitat von Luckie:
Warum wird i ausgerechnet mit 3 multipliziert und warum die Länge 3?
Weil ich kein Zerlegungskriterium hatte, habe ich den range einfach in 4 gleich große Teile zerlegt. Ich hoffte, du würdest den Code an deine Bedürfnisse anpassen können. Es sollte ja nur die ordnungserhaltende Zerlegung demonstriert werden.

marabu
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Array aufteilen

  Alt 20. Mär 2006, 13:04
Ja, es hatte mich nur etwas verwirrt, warum ausgerecht gerade die drei.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 01:42 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