Frage

Dies ist ein mathematisches Problem, aber ich bin sicher, dass dies in einigen Programmierszenarien auftreten muss, zumindest hoffe ich es, und ich habe mich gefragt, ob es einen Namen für diese Art von Situation gab:

Angenommen, ich habe 7 Artikel in einer Serie. Für dieses Beispiel verwenden wir die Woche der Woche. Ich möchte, dass ein Benutzer einreicht, an welchen Wochentagen er in der folgenden Woche kommen will. Sie werden mit einer Standardreihe von Kontrollkästchen präsentiert, einen für jeden Wochentag.

Ich möchte speichern, an denen sie als einzelne Ganzzahl in einem Datenbankfeld wählen.

Offensichtlich konnte ich jeden Tag eine Nummer 1 - 7 zuweisen (wenn der Benutzer alle Auswahlmöglichkeiten deaktiviert lässt). Aber dann stieß ich auf Probleme, wenn ein Benutzer Montag und Dienstag (1 + 2) und ein anderer Mittwoch (3) wählt.

Ich konnte auch jeden Tag der Woche ein bizarres einzigartiges geben, so dass es unmöglich war, dass eine Kombination von Ziffern mit jeder anderen Kombination identisch ist.

Ich hoffe, dass es bereits ein numerisches Eigentum gibt, anstatt eine solche Serie für das zweite Szenario auszugleichen (vielleicht das Quadrat jeder Zahl in der Serie usw.), der bereits gut verwendet und respektiert ist. Im Idealfall wäre dies dem Programmieren so vertraut, dass das Ableiten der einzelnen Ziffern eine gemeinsame Programmiersprache (in meinem Fall PHP) nur sehr wenig überziehen würde.

Habe ich das gerade ausgedacht oder existiert so etwas?

War es hilfreich?

Lösung

Verwenden Sie eine Bitmaske - Kräfte von 2.

Monday = 2 ^ 0 = 1
Tuesday = 2 ^ 1 = 2

usw. Dann wird Montag und Dienstag:

Monday | Tuesday = 3 (or 00000011 in binary)

Andere Tipps

Du könntest benutzen

Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
Saturday = 32
Sunday = 64

Die Kombinationen werden einzigartig sein.

Dann Montag und Dienstag = 3 und Mittwoch = 4.

Dies gibt eine gute Erklärung der Idee in C#

Enum -Flags Attribut

In den Tagen, in denen das Gedächtnis kostbar war, hatten Programmierer oft große Probleme, Einstellungen, Parameter, Spiellayouts usw. als Bit -Sets zu codieren. Einige Sprachen hatten sogar Bit -Sets eingebaut.

Ich erinnere mich, dass ich einmal ein Tutorial für Bit -Sets gelesen habe, in dem sie Board -Layouts zur Lösung des acht Queens -Problems speichern.

Die meisten C -Programmierer hatten ihre eigene kleine Bibliothek mit Manipulation Makros für nur solche Probleme. Sehen Bit -Sets zum Beispiel. Sie werden immer noch viel in Code verwendet, bei denen die Manipulation von Hardware direkt ist - zum Beispiel in digitalen E/A ein- und ausgeschaltet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top