![]() |
Array aufteilen
Ich habe ein dynamisches Array, dieses müsste ich in 'Sub'-Arrays zerlegen. Wie mache ich das am günstigsten?
Beispiel:
Delphi-Quellcode:
Range ist das dynamische Array welches ich in die Arrays SubRange zerlegen will.
var
Range : TStringArray; SubRange : array of TStringArray; begin setlength(SubRange, MAXTHREADS); for i := 0 to MAXTHREADS - 1 do begin SubRange[i] := ??? end; |
Re: Array aufteilen
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) |
Re: Array aufteilen
Hallo Michael,
du hast kein Zerlegungskriterium angegeben, aber Copy() könnte dir behilflich sein:
Delphi-Quellcode:
Grüße vom marabu
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; |
Re: Array aufteilen
:shock: stimmt ja, COPY ging ja auch bei Arrays ... warum vergeß ich dat ständig nur :wall:
|
Re: Array aufteilen
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? :gruebel: |
Re: Array aufteilen
:wall: 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); |
Re: Array aufteilen
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; |
Re: Array aufteilen
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; |
Re: Array aufteilen
Zitat:
marabu |
Re: Array aufteilen
Ja, es hatte mich nur etwas verwirrt, warum ausgerecht gerade die drei. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:24 Uhr. |
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