AGB  ·  Datenschutz  ·  Impressum  







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

TArray - Alternative zu SetLength(..) ?

Ein Thema von Der schöne Günther · begonnen am 24. Feb 2014 · letzter Beitrag vom 3. Mär 2020
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#21

AW: TArray - Alternative zu SetLength(..) ?

  Alt 26. Feb 2014, 13:46
Als Liste sehe ich hier auch keinen Nutzen. Was eher irgendwo mal nützlich sein könnte, wäre sowas, wie Enumerable.Repeat oder Enumerable.Range.
Beides werde ich evtl noch bei Spring.Collections.TCollections hinzufügen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (26. Feb 2014 um 13:56 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#22

AW: TArray - Alternative zu SetLength(..) ?

  Alt 26. Feb 2014, 13:59
Zitat:
Enumerable.Repeat<T>(T wert, int Count)
Exakt, ganz genau das ist, was ich wollte und im Endeffekt ja auch mache. Da es in den Spring4D-Collections ja noch nicht drinsteckt, wollte ich halt im Konstruktor einfach so ein Array reinstecken.

Tue ich ja auch. Ich bin glücklich. Und trotzdem kommen alle, und wollen mich in die Zwangsjacke stecken
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#23

AW: TArray - Alternative zu SetLength(..) ?

  Alt 26. Feb 2014, 15:34
Und trotzdem kommen alle, und wollen mich in die Zwangsjacke stecken
Ja klar, weil Du es nicht geschafft hast ein einziges mal uns eine Anwendung dafür zu nennen! Oder ist das ein Geheimnis?
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.930 Beiträge
 
Delphi 12 Athens
 
#24

AW: TArray - Alternative zu SetLength(..) ?

  Alt 3. Mär 2020, 11:03
Und trotzdem kommen alle, und wollen mich in die Zwangsjacke stecken
Ja klar, weil Du es nicht geschafft hast ein einziges mal uns eine Anwendung dafür zu nennen! Oder ist das ein Geheimnis?
Ich meine, wenn er sagt was er gerne hätte, dann ist doch total egal ob er dazu auch eine Anwendung nennt oder ob er sie Geheimhält.
Wieso, wenn man die Lösung weiß, diese verschweigen, nur weil man keinen überzeugenden Verwendungszweck genannt bekommt?
Sehr verwirrend.
Und trotzdem kommen alle, und wollen mich in die Zwangsjacke stecken
Hast du dir mal deinen Nickname angeschaut?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#25

AW: TArray - Alternative zu SetLength(..) ?

  Alt 3. Mär 2020, 11:11
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TArray - Alternative zu SetLength(..) ?

  Alt 3. Mär 2020, 12:16
Ich habe weder eine "hohe Anzahl", noch muss ich dringend Speicher sparen. Ist doch nicht verboten, seine Booleans in eine Liste zu packen?
Nja, im Grunde hat eine TList<T> intern auch nur ein TArray<T> drinnen, auf das man mit deren Funktionen (Add/Insert/Delete/...) zugreifen kann.

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: Delphi-Referenz durchsuchenTBits ... das ist eine Liste von Bits, also 1-Bit-Boleans.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.094 Beiträge
 
Delphi 12 Athens
 
#27

AW: TArray - Alternative zu SetLength(..) ?

  Alt 3. Mär 2020, 12:39
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;
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#28

AW: TArray - Alternative zu SetLength(..) ?

  Alt 3. Mär 2020, 13:10
Ich gebe nochmal ein Beispiel.

Ganz klassisch:

Delphi-Quellcode:
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;
Mir war das zu lang. Ich wollte lieber so etwas haben:
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 😉
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TArray - Alternative zu SetLength(..) ?

  Alt 3. Mär 2020, 14:22
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:
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
oder SetLength(a, 100); for i := 0 to High(a) do a[i] := 10.0;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Mär 2020 um 14:28 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 00:04 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