Hat diese Art von Funktion oder Technik einen Namen?

8

Hallo, ich bin etwas neu in der Programmierung, eher ein Hobby. Ich frage mich, ob eine der folgenden Logik oder Technik einen bestimmten Namen oder Begriff hat. Mein aktuelles Projekt hat 7 Kontrollkästchen, eines für jeden Wochentag. Ich brauchte einfach zu speichern, welche Boxen überprüft wurden.

Im Folgenden finden Sie die Methode zum Speichern der aktivierten Kontrollkästchen in einer einzigen Zahl. Jedes Kontrollkästchen erhält einen Wert, der gegenüber dem letzten Kontrollkästchen doppelt ist. Wenn ich herausfinden will, welche Kontrollkästchen aktiviert sind, arbeite ich rückwärts und sehe, wie oft ich den Gesamtwert durch den Wert des Kontrollkästchens teilen kann.

%Vor%

Die Methode funktioniert gut für das, wofür ich sie brauche. Wenn Sie jedoch eine andere Möglichkeit sehen, dies zu tun, oder eine bessere Art zu schreiben, würde ich mich für Ihre Vorschläge interessieren.

    
Andy Shellam 19.03.2010, 15:04
quelle

7 Antworten

6

Jemand anders hat Bit-Maskierung erwähnt, aber ich dachte, ich würde Ihnen einen Weg zeigen, Ihren Code zu vereinfachen.

%Vor%     
ChaosPandion 19.03.2010 15:09
quelle
4

Dies ähnelt Bitmasken. Wenn ich den Blog finden kann, den ich diese Woche mit diesem exakten Beispiel gelesen habe, werde ich ihn veröffentlichen!

Ah, hab's! Hier ist es .

Sie können dann Dinge tun wie:

%Vor%

Wählen Sie Sonntag und Montag. Oder in Ihrem Beispiel, wenn Sie den Wert jedes Kontrollkästchens überprüfen, können Sie tun:

%Vor%

und um zu prüfen, ob ein bestimmter Tag eingestellt ist:

%Vor%

BEARBEITEN:

Die integrierte DayOfWeek-Funktion von .NET erlaubt keine Bitmaskierung mehrerer Werte, daher müssen Sie Ihre eigene DaysOfWeek enum rollen.

    
Andy Shellam 19.03.2010 15:06
quelle
3

Sie könnten ein Enum mit allen Tagen erstellen und es mit dem Attribut [Flags] markieren und dann jeden Tag den gleichen Wert wie Ihr (bla.checked) geben? XX ..

Dann könnten Sie + =, und verwenden, oder um die gleiche Funktionalität zu erhalten ..

Um zu überprüfen, ob ein Wert enthält, können Sie sagen, dass Sie Montag

tun würden

if (myEnum & amp; Days.Monday == Days.Monday) {     ... }

    
Peter 19.03.2010 15:08
quelle
1

Es wird Bitmasking genannt und Sie können dasselbe leichter mit einer Aufzählung mit dem Flags-Attribut .

    
Lee 19.03.2010 15:08
quelle
1

Es heißt ein Bitfeld, und ja, es ist der platzsparendste Weg, dies zu lösen. Die Verwendung separater Boolesche Werte wird wahrscheinlich mehr Speicher benötigen, aber IMO ist die bessere Lesbarkeit ungefähr sechs Bytes wert.

    
Kilian Foth 19.03.2010 15:09
quelle
0

Sie können ein enum verwenden ... es ist lesbarer und hübscher

%Vor%     
Luiscencio 19.03.2010 15:12
quelle
0

Sie können die Komplexität in einer Funktion verbergen: und es ist besser, Bit-Shift statt Teilen

%Vor%     
sisis 19.03.2010 15:12
quelle

Tags und Links