AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Anzahl der Elemente eines Aufzählungstyps ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Anzahl der Elemente eines Aufzählungstyps ermitteln

Ein Thema von Ares · begonnen am 9. Dez 2007 · letzter Beitrag vom 9. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Anzahl der Elemente eines Aufzählungstyps ermitteln

  Alt 9. Dez 2007, 14:11
Hallo!

Kann man irgendwie die Anzahl der Elemente eines Aufzählungstyps ermitteln?

Delphi-Quellcode:
type
  TMyEnum = (meEins, meZwei, meDrei);
  ...
  
  int := length(TMyEnum);
In diesem Beispiel sollte also int der Wert 3 zugewiesen werden, weil der Aufzählungstyp TMyEnum drei Elemente hat... Nur geht dies eben nicht mit length. Gibt es eine entsprechende Methode, die dies leistet?

Besten Dank
Ares
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Anzahl der Elemente eines Aufzählungstyps ermitteln

  Alt 9. Dez 2007, 14:14
Wenn du einfache Aufzählungen verwendest, kannst du Ord(High(Typ))+1 verwenden. High(TMyEnum) wäre bei dir meDrei und Ord(meDrei) entsprechend 2. Das geht jedoch nicht, wenn du die ordinalen Werte selbst vergibst, z.b.
TMyEnum = (meEins = 100, meZwei = 53, meDrei = 42);
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Anzahl der Elemente eines Aufzählungstyps ermitteln

  Alt 9. Dez 2007, 14:20
Delphi-Quellcode:
var
  i: TMyEnum;
  Zahler: Integer;
begin
  Zahler := 0;
  for i := Low(TMyEnum) to High(TMyEnum) do
    Inc(Zaehler);
end;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Anzahl der Elemente eines Aufzählungstyps ermitteln

  Alt 9. Dez 2007, 14:34
@Bernhard Geyer
Anzahl := High(TMyEnum) - Low(TMyEnum) + 1; Aber wie Apollonius schon erwähnte geht das nur wenn zwischendurch keine Werte "fehlen".

also bei den einfachen Varianten
Delphi-Quellcode:
Anzahl := High(TMyEnum) - Low(TMyEnum) + 1;
// oder
Anzahl := High(TMyEnum) + 1; // da Low(TMyEnum) per Defult 0 ist
Und für den Rest gibt es keine Möglichkeit, da nirgend's gespeichert wird welche Werte belegt sind und welche nicht.

Du kannst dir höchstens eine Konstante definieren, wo du selber die vorhandenen Werte einfügst und kannst dieses dann zählen/prüfen lassen.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Anzahl der Elemente eines Aufzählungstyps ermitteln

  Alt 9. Dez 2007, 14:40
Sorry quatsch. Schau gerade noch ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#6

Re: Anzahl der Elemente eines Aufzählungstyps ermitteln

  Alt 9. Dez 2007, 14:44
Hallo!

Vielen Dank für den Tipp, die for-Schleife funktioniert prima. Kann man das auch in eine allgemeine Funktion umwandeln, die für einen beliebigen Aufzählungstyp die Anzahl der Elemente ermittel?

Delphi-Quellcode:
function EnumLength(Enum: TClass): Integer;
var i: TClass;
begin
  result := 0;
  try
    for i:=Low(Enum) to High(Enum) do
      inc(result);
  except

  end;
end;
Dies funktioniert leider nicht, weil i in der for-Schleife ein Ordinaltyp sein muss. Ich weiß allerdings nicht wie man einen Ordinaltyp angibt. Etwas wie i: TOrdType; gibt es nicht...

EDIT:
Ok, ich habe gerade erste die weiteren Antworten gesehen. Ich verwende nur Aufzählungstypen, bei denen ich die Ordinalwerte nicht selber vorgebe. Der Spezialfall, dass "zwischendurch Werte fehlen" kann hierbei also ignoriert werden. Für die Variante result := High(TOrdType)-1; fehlt mir auch noch das Wissen wie man korrekt einen Ordinaltyp angibt...
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Anzahl der Elemente eines Aufzählungstyps ermitteln

  Alt 9. Dez 2007, 14:52
i muss vom typ integer sein.
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

Re: Anzahl der Elemente eines Aufzählungstyps ermitteln

  Alt 9. Dez 2007, 14:53
var i: Integer; !!
Ordinaltypen sind Integer, Char, Byte, Word etc.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#9

Re: Anzahl der Elemente eines Aufzählungstyps ermitteln

  Alt 9. Dez 2007, 14:55
Zitat von MrKnogge:
i muss vom typ integer sein.
Das ist soweit ich weiß falsch. Die Schleifenvariable i muss "nur" ein Ordinaltyp sein (Integer ist ein solcher). Die Frage ist also gerade, wie ich die Funktion so deklariere, dass ein Ordinaltyp übergeben wird.
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Anzahl der Elemente eines Aufzählungstyps ermitteln

  Alt 9. Dez 2007, 14:56
Ich habe mich auf obiges Beispiel bezogen, war vermutlich nur ein kleiner fehler wenn man in Gedanken ist ...
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:39 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