Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi durch verschiede Sets iterieren (https://www.delphipraxis.net/192170-durch-verschiede-sets-iterieren.html)

haentschman 25. Mär 2017 07:39

Delphi-Version: 10 Berlin

durch verschiede Sets iterieren
 
Moin...:P

Es ist noch früh am Morgen...:wink:

Ich habe eine Schleife die in Abhängigkeit vom Jahr verschiedene Sets iterieren muß...
Delphi-Quellcode:
var
  BlubbSet: Set of Blubb; // TBlubb = (bb1, bb2, bb3, bb4, bb5, bb6, bb7);
...
case FYear of
  2016:
    begin
      BlubbSet := [bb1, bb2, bb3, bb4, bb5];
    end;
  2017:
    begin
      BlubbSet := [bb1, bb3, bb5];
    end;
end; // Das Set wird wie erwartet angelegt.
...
for I := Low(BlubbSet) to High(BlubbSet) do // <- Inkompatible Typen. ????
begin
  //
end;
Bitte helft mir auf die Sprünge... :oops:

Der schöne Günther 25. Mär 2017 07:56

AW: durch verschiede Sets iterieren
 
Und von welchem Typ soll i sein? TBlubb?

Verstehe das Low und High nicht. Warum nicht einfach

For myBlubb in BlubbSet Do ...

haentschman 25. Mär 2017 07:57

AW: durch verschiede Sets iterieren
 
Moin...:P

lokale Schleifenvariable = I: Integer;

p80286 25. Mär 2017 08:16

AW: durch verschiede Sets iterieren
 
Ich bin auf dem gleichen Dampfer wie der schöne Mann. Warum behandelst Du ein Set wie ein Array?

Gruß
K-H

Uwe Raabe 25. Mär 2017 08:40

AW: durch verschiede Sets iterieren
 
Delphi-Quellcode:
var
  iBlubb: TBlubb;
...
for IBlubb in BlubbSet do // <- Inkompatible Typen. ????
begin
  I := ord(iBlubb); // falls das I als Integer überhaupt gebraucht wird
  //
end;

haentschman 25. Mär 2017 08:44

AW: durch verschiede Sets iterieren
 
Zitat:

Warum behandelst Du ein Set wie ein Array?
:oops: weil ich es grad nicht besser weiß. Ich habe normal mit Arrays nichts zu tun...

Das for/in funktioniert. Aber die Sortierung ist immer so wie in der Deklaration. :? Aber auf die "gewünschte" Sortierung bin ich angewiesen...
Delphi-Quellcode:
case FYear of
  2016:
    begin
      BlubbSet := [bb1, bb2, bb3, bb4, bb5];
    end;
  2017:
    begin
      BlubbSet := [bb5, bb1, bb3]; // Reihenfolge egal :-( 
    end;
end; // immer BlubbSet := [bb1, bb3, bb5];

Der schöne Günther 25. Mär 2017 09:02

AW: durch verschiede Sets iterieren
 
Dann ist das Standard-Delphi Set nicht das was du suchst.

p80286 25. Mär 2017 09:07

AW: durch verschiede Sets iterieren
 
Einmal anders herum, was willst Du erreichen?
Ein Set ist normal nicht sortiert. Es enthält irgendetwas oder nicht. Natürlich haben die Daten intern eine Reihenfolge, aber das sollte für Dich irrelevant sein.

Gruß
K-H

Uwe Raabe 25. Mär 2017 09:13

AW: durch verschiede Sets iterieren
 
Zitat:

Zitat von haentschman (Beitrag 1365541)
Das for/in funktioniert. Aber die Sortierung ist immer so wie in der Deklaration. :? Aber auf die "gewünschte" Sortierung bin ich angewiesen...

Ein Set hat per Definition keine Sortierung. Lediglich der Basistyp hat eine. Wenn die Reihenfolge wichtig ist, dann sind Arrays der bessere Ansatz.

Delphi-Quellcode:
var
  BlubbSet: TArray<TBlubb>; // TBlubb = (bb1, bb2, bb3, bb4, bb5, bb6, bb7);
Der Rest kann eigentlich so bleiben.

Achtung! Es hindert dich niemand, ein TBlubb mehrmals in das Array zu setzen. Bei einem Set wäre das egal.

haentschman 25. Mär 2017 09:24

AW: durch verschiede Sets iterieren
 
Was ich möchte:

Die ausgewählten Enumerations (z.B. bb4, bb2, bb7 = "Set" = beliebige Reihenfolge) aus TBlubb = (bb1, bb2, bb3, bb4, bb5, bb6, bb7) in dieser Reihenfolge durchiterieren.
Hintergrund:
In der Reihenfolge des gewünschten "Sets" werden komplexe Objekte erzeugt die dann in einer Combobox angehängt/eingefügt verden sollen. Die Reihenfolge (früher in der DB als "Position" abgelegt) ist nicht mehr definiert, da eine generische Erzeugung der Objekte anhand des "Sets" erfolgen soll. Ich will mir aber die Möglichkeit Definition der Reihenfolge, unabhängig von der Position in TBlubb, offen halten.

Zitat:

Wenn die Reihenfolge wichtig ist, dann sind Arrays der bessere Ansatz.
... aber wie weise ich das Array, welches je Jahrgang verschiedene Dimensionen hat, einer Variablen zu um das Array durchzuiterieren. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 Uhr.
Seite 1 von 2  1 2      

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