![]() |
AW: TArray - Alternative zu SetLength(..) ?
Als Liste sehe ich hier auch keinen Nutzen. Was eher irgendwo mal nützlich sein könnte, wäre sowas, wie
![]() ![]() Beides werde ich evtl noch bei
Delphi-Quellcode:
hinzufügen.
Spring.Collections.TCollections
|
AW: TArray - Alternative zu SetLength(..) ?
Zitat:
Tue ich ja auch. Ich bin glücklich. Und trotzdem kommen alle, und wollen mich in die Zwangsjacke stecken :-( |
AW: TArray - Alternative zu SetLength(..) ?
Zitat:
|
AW: TArray - Alternative zu SetLength(..) ?
Zitat:
Wieso, wenn man die Lösung weiß, diese verschweigen, nur weil man keinen überzeugenden Verwendungszweck genannt bekommt? Sehr verwirrend. Zitat:
|
AW: TArray - Alternative zu SetLength(..) ?
Viele Jahre sind seitdem vergangen, und ich blicke zurück auf mein TArray.Construct<T>(..) das ich mir nach dieser feurigen Diskussion hier wohl gebaut haben muss. Anwendungsfälle hatte ich in der Zwischenzeit viele, insbesondere für Tests.
Ich bereue nichts. |
AW: TArray - Alternative zu SetLength(..) ?
Zitat:
Gut, wenn man anfängt mittendrin Booleans einzufügen oder rauszulöschen, ohne einen Zusammenhang zu irgendwas, oder der Zusammenhang zu einer anderen unabhängigen Liste, dann würde mit eher der Gedanke zu sowas die einem TDictionary<Irgendwas,Boolean> schwelgen. PS: ![]() |
AW: TArray - Alternative zu SetLength(..) ?
Was genau Du willst kann ich leider auch nicht nachvollziehen, aber vielleicht geht das hier in deine Richtung.
Man könnte solche Initialisierungen evtl. so machen, und die eigentlichen Settings damit separat kapseln.
Delphi-Quellcode:
var
LVar1 : TWasAuchImmer; LVar2 : TWasAuchImmer; LVar3 : TWasAuchImmer; Init_FuerAufgabe1( LVar1 ); Init_FuerAufgabe2( LVar2 ); Init_FuerAufgabe3( LVar1 ); ... procedure Init_FuerAufgabe1( var AVar : TWasAuchImmer); begin if not Assigned( AVar ) then AVar := TWasAuchImmer.Create; AVar.Items.Clear; AVar.Items.Add( false ); AVar.Items.Add( true ); AVar.Items.Add( false ); AVar.Items.Add( false ); AVar.Items.Add( false ); end; procedure Init_FuerAufgabe2( var AVar : TWasAuchImmer); begin if not Assigned( AVar ) then AVar := TWasAuchImmer.Create; AVar.Items.Clear; AVar.Items.Add( false ); AVar.Items.Add( true ); AVar.Items.Add( false ); AVar.Items.Add( true); AVar.Items.Add( false ); end; procedure Init_FuerAufgabe3( var AVar : TWasAuchImmer); begin if not Assigned( AVar ) then AVar := TWasAuchImmer.Create; AVar.Items.Clear; AVar.Items.Add( true ); AVar.Items.Add( true ); AVar.Items.Add( false ); AVar.Items.Add( false ); AVar.Items.Add( false ); end; |
AW: TArray - Alternative zu SetLength(..) ?
Ich gebe nochmal ein Beispiel.
Ganz klassisch:
Delphi-Quellcode:
Mir war das zu lang. Ich wollte lieber so etwas haben:
procedure p();
var a, b: TArray<Single>; arrayIndex: Integer; begin SetLength(a, 100); for arrayIndex := Low(a) to High(a) do a[arrayIndex] := 10.0; SetLength(b, 50); for arrayIndex := Low(b) to High(b) do b[arrayIndex] := 20.0; ProcessData(a, b); end;
Delphi-Quellcode:
procedure p()
begin ProcessData( TArray.Construct<Single>(100, 10.0), TArray.Construct<Single>(50, 20.0) ); end; Ich bekam es. Und sah dass es gut war. Ende 😉 |
AW: TArray - Alternative zu SetLength(..) ?
Ja, im Grunde wäre es zu praktisch, wenn der Array-Helper im Delphi bereits eine Create-Methode hätte, wo man eine Länge mit optionaler Initialisierung angeben könnte.
Nach SetLength ist der neue Speicher mit 0 initialisiert, beim Boolean-Array macht ein FillChar mit 1 bzw. mit Ord(True) ganz viele True daraus.
Delphi-Quellcode:
oder
uses
AnsiStrings; procedure TForm1.FormCreate(Sender: TObject); var a: TArray<Single>; begin //SetLength(a, 100); //for i := Low(a) to High(a) do // a[i] := 10.0; SetLength(a, 100); Move(PAnsiChar(DupeString(#0#0' A', 100))^, a[0], 100*4); // oder FillChar für ByteTypen
Delphi-Quellcode:
:stupid:
SetLength(a, 100); for i := 0 to High(a) do a[i] := 10.0;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 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