Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi-Mengen (set of) in CSharp (C#) (https://www.delphipraxis.net/107661-delphi-mengen-set-csharp-c.html)

Sascha L 31. Jan 2008 12:18


Delphi-Mengen (set of) in CSharp (C#)
 
Hallo,

mit Delphi kann ich folgendes machen:

Delphi-Quellcode:
TSkipHour = 0..23;
TSkipHours = set of TSkipHour;
Damit ist es mir möglich, z.B. die Stunden 3, 5 und 10 in die Menge aufzunehmen und ich kann dann später überprüfen, welche Stunden ausgewählt wurden, also in der Menge drin sind.

Wie kann ich das nun in C# implementieren?

Mit einem enum und Flags müsste ich das ja total umständlich machen:

Code:
[Flags]
    enum SkipHour: uint
    {
        0 = 0x00000001,
        1 = 0x00000004,
        2 = 0x00000008
        // usw....
    }
Bleibt mir da also nichts anderes übrig, als z.B. eine Boolean-Liste zu verwenden, wo ich für 0 bis 23 immer true oder false setze?

Viele Grüße
Sascha

Bernhard Geyer 31. Jan 2008 12:33

Re: Delphi-Mengen (set of) in CSharp (C#)
 
Ist nicht Set Of eine Delphi-Spezialität die keine andere Programmiersprache so elegant realisiert? :gruebel:

OregonGhost 31. Jan 2008 12:35

Re: Delphi-Mengen (set of) in CSharp (C#)
 
Wäre es so kompliziert, ein uint zu verwenden und die Bits als bools?

Code:
uint myset = 0;
myset |= (1 << 8); // Setzt Stunde 8
myset &= ~(1 << 8); // Löscht Stunde 8
myset & (1 << 8) > 0; // Testet, ob Stunde 8 gesetzt ist
Das ganze zur Not in eine kleine (eventuell generische) Klasse/Struktur packen und gut. Hatte so etwas mal in C++ geschrieben, aber das war spezialisiert auf ein bestimmtes Datenformat für einen Mikrocontroller.

@Roter Kasten:
Die C++-STL kennt set als generische Container-Klasse. Ist natürlich kein Sprachfeature, kann dafür aber alles aufnehmen. Aber ansonsten ist das wohl so.

Edit: Es gibt übrigens auch System.Collections.BitArray. Das macht ja im Prinzip schon all das.

Khabarakh 31. Jan 2008 12:40

Re: Delphi-Mengen (set of) in CSharp (C#)
 
Zitat:

Zitat von Sascha L
Bleibt mir da also nichts anderes übrig, als z.B. eine Boolean-Liste zu verwenden, wo ich für 0 bis 23 immer true oder false setze?

Dafür gibt es System.Collections.BitArray, ganz so schön wie Sets ist es dann natürlich immer noch nicht.

[edit]
Zitat:

Zitat von OregonGhost
@Roter Kasten:

Bah, warum bekommst den nur du :mrgreen: ?
Zitat:

Die C++-STL kennt set als generische Container-Klasse. Ist natürlich kein Sprachfeature, kann dafür aber alles aufnehmen. Aber ansonsten ist das wohl so.
Mit 3.5 gibt es nun auch System.Collections.Generics.HashSet<T>. In diesem Fall ist ein Bitvektor natürlich kompakter, falls das bei 24 Werten wirklich jemanden stören sollte ;) .
[/edit]

Sascha L 31. Jan 2008 13:17

Re: Delphi-Mengen (set of) in CSharp (C#)
 
Ok, danke Leute. Werde dann also ein Bit-Array verwenden, das ist ja im Prinzip das, was ich auch schon als einzige Lösung gesehen haben, dass ich eine Liste habe, wo ich die Werte true und false habe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 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