Как сгенерировать уникальную строку? - PullRequest
2 голосов
/ 20 января 2012

У меня есть устройство, и для каждого устройства я хочу сгенерировать строку следующего формата: XXXXXXXX. Каждый X является либо B, G, либо R. Примером является GRBRRBRB. Это дает мне примерно 7000 ключей для работы, чего достаточно, так как я сомневаюсь, что у меня будет больше устройств.

Я думал, что смогу сгенерировать их все заранее, и выбросить их в файл или что-то еще, и просто получить следующий доступный ключ из этого, но мне интересно, есть ли лучший способ сделать это.

Я знаю, что есть лучшие способы сделать это, если мне не нужна гарантированная уникальность, но я определенно нуждаюсь в этом, поэтому я не уверен, что лучший способ сделать это.

Ответы [ 3 ]

2 голосов
/ 20 января 2012

Рассматривайте это как троичное представление числа, где R = 0, B = 1, G = 2. Поэтому, когда вы пишете n-й идентификатор, первая цифра - R, если n% 3 == 0, B, если n% 3 == 1, G в противном случае. Вторая цифра такая же, за исключением того, что вы смотрите на (n / 3)% 3; затем для третьей цифры посмотрите на (n / 3 ^ 2)% 3; и т.д.

0 голосов
/ 20 января 2012

Я собираюсь предположить, что вы хотите, чтобы они были уникальными, чтобы идентифицировать их для некоторого типа сетевой (интернет) активности. В таком случае у меня был бы веб-сервис, который позаботился бы о том, чтобы каждое устройство было уникальным путем выдачи идентификаторов. Программное обеспечение на каждом устройстве будет видеть, есть ли у него идентификатор (хранится локально), а если нет, запросить его у веб-службы.

0 голосов
/ 20 января 2012

Если на ваших устройствах имеется какой-либо уникальный последовательный идентификатор, я бы реализовал детерминистический алгоритм для поиска этой "уникальной строки".

Я имею в виду что-то вроде

GetDeviceRgbString(deviceid) { // deterministic algorithm returning appropriate value using device id to choose it }

В противном случае подумайте о том, чтобы сохранить его где-нибудь (зависит от вашей среды, вы дали мало данных об этом, но это может быть файл, база данных, ...) и пометить их как использованные, желательно сохранить данные о назначенном устройстве, оно может вам понадобитьсяодин раз.

...