Combiner deux nombres entiers pour créer un nombre unique
Bon Matin,
Je cherchais un moyen de combiner les deux entiers pour créer un numéro unique, j'ai deux tables que j'ai besoin de combiner dans une troisième table avec des numéros uniques,
Voici mes tables:
Table A
SchoolID ClassId
107 56644231
107 56644532
107 320110212
Table B
SchoolID ClassId
108 566442310
108 56644532
108 50110212
J'ai besoin d'exporter ces champs pour une troisième table combinant ID de classe et ID de l'école dans un seul champ appelé identificateur de classe. J'ai besoin d'être en mesure de combiner ces chiffres et ensuite pouvoir uncombine pour obtenir schoolid et classid distinct pour fins de mise à jour. Je pensais que la concaténation de chaînes 'schoolid + '00' + 'classid'
depuis que je sais que schoolid sera toujours un nombre à 3 chiffres, mais je suis à la recherche d'une autre façon peut-être mathématique où je n'ai pas à utiliser des chaînes de caractères jette.
Est-il un moyen mathématique pour ce faire? Ou est la conversion en chaîne de la meilleure façon de le faire?
Je suis à l'aide de C# pour le code de la solution.
Merci,
source d'informationauteur jangeador
Vous devez vous connecter pour publier un commentaire.
Similaire à Magnus Hoff, mais je vous conseille d'utiliser un binaire approche amicale au lieu de la base 10 approche.
Et puis, plus tard:
Je pense que c'est un peu plus simple du point de vue programmation (la rendre plus claire que votre ID de l'école est de 1 byte (0-255), l'ID de classe est de 3 octets).
Vous pouvez aussi facilement faire cela avec un bigint (Long /Int64), faisant deux int32 un seul int64 en toute sécurité:
Et puis, plus tard:
Je voudrais combiner l'ID comme ceci:
Vous pouvez alors obtenir le
SchoolID
comme ceci:et vous pouvez obtenir le
ClassID
comme ceci:Si SchoolID est toujours un nombre à 3 chiffres multiplier ClassId par 1000 puis ajouter SchoolID.
Votre numéro peut "déborder" si., et compte tenu de ceux que vous avez si ils sont 32 bits, ils le feront.
Vous indiquer que vous travaillez avec une table. Cela me mène à croire que vous travaillez dans une base de données.
Donc je pose la question, pourquoi ne pas les stocker dans des colonnes distinctes et de les rendre simples les clés étrangères? Pourquoi créer l'ambiguïté d'essayer de concaténer ou transformer les nombres avec une équation mathématique?
Si vous utilisez une autre table, vous pouvez utiliser un auto incrément de champ et de la combinaison des trois champs (dans l'ordre de votre choix) vous donnera une ID unique.
Ce fil a détaillé les différentes autres approches mathématiques, certains sont juste mieux. Mais pour votre cas, je suppose que si ceux-ci sont à peine bonnes idées. Je dirais que vous devez enregistrer les deux id dans une 3e table qui a un id unique (clé primaire) de la colonne.
Utilisation ((a + b)(a + b + 1) * 0.5) + b
Référence
http://en.wikipedia.org/wiki/Pairing_function