Array mit Namen statt Ziffern als Index
Array mit Namen statt Ziffern als Index
Hallo Gemeinde,
ich stehe im Moment iwi total auf dem Schlauch, wahscheinlich sehe ich den Wald vor lauter Bäumen nicht.
Ich lese einen kleinen Apparat aus und bekomme div. Hexwerte, die den Zuatand der Ein-/Ausgänge repräsentiert.
Diese verwende ich weiter.
Um den Zugriff einfach zu gestalten, wollte ich die 12 Stati in eine Art "Array of boolen" packen.
Zugriff sollte dann in etwas so erfolgen:
If IO.Ready = true then...
If IO.Sel1 = false then...
Ich finde im Moment einfach nicht den richtigen Ansatz, dass Array nicht über den Index, also z.B. io[2] anzuprechen,
sondern über die "Klartextnamen". Ich habe es auch schon mit einem Record versucht (Name: string, Wert : boolean)
und davon einen Array gemacht, aber da muss ich dann ja nach der Zuweisung des Namens (IO[7].Name:= 'Ready';)
trotzdem wieder den Index angeben, um den Wert abzufragen, also: if IO[7].wert = true then...
Danke im Voraus
Michael
ich stehe im Moment iwi total auf dem Schlauch, wahscheinlich sehe ich den Wald vor lauter Bäumen nicht.
Ich lese einen kleinen Apparat aus und bekomme div. Hexwerte, die den Zuatand der Ein-/Ausgänge repräsentiert.
Diese verwende ich weiter.
Um den Zugriff einfach zu gestalten, wollte ich die 12 Stati in eine Art "Array of boolen" packen.
Zugriff sollte dann in etwas so erfolgen:
If IO.Ready = true then...
If IO.Sel1 = false then...
Ich finde im Moment einfach nicht den richtigen Ansatz, dass Array nicht über den Index, also z.B. io[2] anzuprechen,
sondern über die "Klartextnamen". Ich habe es auch schon mit einem Record versucht (Name: string, Wert : boolean)
und davon einen Array gemacht, aber da muss ich dann ja nach der Zuweisung des Namens (IO[7].Name:= 'Ready';)
trotzdem wieder den Index angeben, um den Wert abzufragen, also: if IO[7].wert = true then...
Danke im Voraus
Michael
- corpsman
- Lazarusforum e. V.
- Beiträge: 1452
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Array mit Namen statt Ziffern als Index
Dein beispiel deutet aber eine Struktur an.
so ginge es via Array
so ginge es via Array
Code: Alles auswählen
Type
TIrgendwas = (Ready, sel1, sel2);
var
io:Array[TIrgendwas ] of boolean;
begin
io[Ready] := true;
--
Just try it
Just try it
-
- Beiträge: 711
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 10
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Array mit Namen statt Ziffern als Index
Code: Alles auswählen
program Project1;
{$R *.res}
type Statis =(Stati_1,Stati_noch_einer, Stati_bla,Stati_x,nochwas, und_dieser);
var io:Array[Statis] of Boolean;
begin
io[Stati_bla]:=TRUE;
io[und_dieser]:=FALSE;
end.

Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
-
- Beiträge: 1881
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Array mit Namen statt Ziffern als Index
Wenn es dynamisch sein muss, musst du eine Map/Dictionairy nutzen.
Code: Alles auswählen
uses
Generics.Collection;
type
TStringBoolMap = specialize TDictionary<String, Boolean>;
var
map: TStringBoolMap;
begin
map := TStringBoolMap.Create;
try
// Einträge erstellen
map.Add('Key1', False);
map.Add('Key2', False);
map.Add('Key3', False);
// Einträge nutzen
if map['Key1'] then
WriteLn('Key1 ist True');
// Überprüfen ob ein Key in der Map ist
if map.ContainsKey('Key3') then
map['Key3'] := True;
finally
Free;
end;
end.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1452
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Array mit Namen statt Ziffern als Index
@warf
kannst du zufällig TFPGMap und TDictionary gegeneinander abgrenzen ?
kannst du zufällig TFPGMap und TDictionary gegeneinander abgrenzen ?
Code: Alles auswählen
type
TStringBoolMap = specialize TFPGMap <String, Boolean>;
vs
TStringBoolMap = specialize TDictionary<String, Boolean>;
--
Just try it
Just try it
Re: Array mit Namen statt Ziffern als Index
Der Unterschied ist wohl hauptsächlich historisch bedingt.corpsman hat geschrieben: ↑Mi 17. Mai 2023, 12:53@warf
kannst du zufällig TFPGMap und TDictionary gegeneinander abgrenzen ?
Code: Alles auswählen
type TStringBoolMap = specialize TFPGMap <String, Boolean>; vs TStringBoolMap = specialize TDictionary<String, Boolean>;
FPC hatte früher Generics Support als Delphi, aber jetzt halt auch noch den Dialekt von Delphi
https://wiki.freepascal.org/Generics
Ich glaube die funktionieren fast gleich.
S.a. https://forum.lazarus.freepascal.org/in ... ic=61460.0
-
- Beiträge: 1881
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Array mit Namen statt Ziffern als Index
Generics.Collections ist Delphi Kompatibel. Außerdem ist es eine insich konsistente Biliothek. So implementieren die Klassen untereinander die IEnumerable Interfaces, was z.B. den vorteil hat das du ne Map direkt aus einer Liste mit Tupeln erstellen kannst und anders rum. Oder du kannst auch ganz einfach HashSets in Listen Konvertieren, und generell ist Generics.Collections einfach ein bisschen Vielseitiger.
FGL macht was es soll, aber Generics.Collections bietet oft einfach mehr Komfortfeatures.
FGL macht was es soll, aber Generics.Collections bietet oft einfach mehr Komfortfeatures.
Re: Array mit Namen statt Ziffern als Index
Hallo zusammen,
vielen Dank für Eure Antworten.
Reicht für meine Bedürfnisse schon vollkommen aus.
Wünsche Allen einen guten Start in die Woche
vielen Dank für Eure Antworten.
Code: Alles auswählen
Type
TIrgendwas = (Ready, sel1, sel2);
var
io:Array[TIrgendwas ] of boolean;
begin
io[Ready] := true;
Wünsche Allen einen guten Start in die Woche