Domanda

Questo è un problema di matematica, ma sono sicuro che questo deve venire in alcuni scenari di programmazione, almeno lo spero, e mi chiedevo se ci fosse un nome per questo tipo di situazione:

Supponiamo che io sono 7 elementi in una serie. Per il bene di questo esempio, usiamo i giorni della settimana. Vorrei un utente di inviare in quali giorni della settimana hanno in programma di venire nella settimana successiva. Si sono presentati con una serie standard di caselle di controllo, uno per ogni giorno della settimana.

Vorrei memorizzare gli giorni scelgono in un campo database come un singolo intero.

Ovviamente, ho potuto assegnare ogni giorno un numero, 1-7 (lasciando 0 su nel caso in cui l'utente lascia tutte le scelte incontrollato). Ma poi mi imbatto in problemi se un utente sceglie Lunedi e Martedì (1 + 2) e un altro sceglie mercoledì (3).

Potrei anche dare ad ogni giorno della settimana un po 'bizzarra unica tale che era impossibile per qualsiasi combinazione di cifre da essere identico a qualsiasi altra combinazione.

La mia speranza è che, piuttosto che compongono una tale serie per il secondo scenario, alcune proprietà numerica esiste già (forse il quadrato di ogni numero della serie, ecc) che è già ben utilizzato e rispettato. Idealmente, questo sarebbe così familiare alla programmazione, che deriva le singole cifre sarebbe voluto molto poco overhead di un linguaggio di programmazione comune (nel mio caso PHP).

Ho appena sognato questo in su, o fa qualcosa di simile esiste?

È stato utile?

Soluzione

Utilizzare una maschera di bit -. Potenze di 2

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

e così via. Poi Lunedi e Martedì diventa:

Monday | Tuesday = 3 (or 00000011 in binary)

Altri suggerimenti

Si potrebbe utilizzare

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

Le combinazioni saranno unici.

Poi Lunedi e Martedì = 3, e Mercoledì = 4.

Questo dà una buona spiegazione del idee in C #

Enum flag di attributo

Torna nei giorni in cui la memoria era prezioso, i programmatori spesso è andato a un sacco di problemi per codificare le impostazioni, i parametri, i layout di gioco, e così via come insiemi di bit. Alcune lingue anche avuto set di bit integrato al loro interno.

Ricordo che una volta a leggere un tutorial su insiemi di bit che li utilizzati per memorizzare layout di bordo per risolvere il problema otto regine.

La maggior parte programmatori C avevano la propria piccola biblioteca di macro manipolazione po 'solo per questi tipi di problemi. Vedi Imposta Bit per esempio. Essi sono ancora utilizzati molto in codice che fa manipolazione dell'hardware diretta -. Girare bit e lo spegnimento in I / O digitali per esempio

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top