Как создать уникальную 4-значную строку - PullRequest
2 голосов
/ 05 марта 2009

Я ищу способ генерировать (довольно) уникальную (не автоинкрементную) 4-значную строку, используя цифры 0 - 9 для каждой цифры, используя C #. Я могу подтвердить уникальность и сгенерировать другое число, если найден дубликат. Я думал о том, чтобы основать число каким-либо образом на свойстве Ticks объекта DateTime, но мне сложно собрать все вместе.

Любые мысли или опыт будут высоко оценены.

Ответы [ 5 ]

9 голосов
/ 05 марта 2009

Если оно не увеличивается, как оно будет уникальным во второй раз?

То, что вы говорите, что вы хотите сгенерировать случайную 4-значную строку из набора всех возможных неиспользуемых 4-значных строк?

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

РАЗЪЯСНЕНИЕ: Другие ответы предлагают просто сгенерировать случайную 4-значную строку и оставить ее при этом. Предположительно, вы бы тогда проверили, использовалось ли оно уже, и сгенерировали еще один, если он использовался. Это может иметь крайне неоптимальную производительность. Предположим, что вы уже использовали 9 999 (все, кроме одной) из возможных 4-значных строк в диапазоне от 0000 до 9999. Чтобы сгенерировать последнюю, этот метод может занять много-много попыток.

1 голос
/ 05 марта 2009

Создайте массив всех 10000 значений, используя короткий тип, а затем shuffle it.

0 голосов
/ 06 марта 2009

Зависит от ваших требований. Сколько из них вы ожидаете получить? Если вам просто нужна пара сотен, вы можете сгенерировать случайное число от 0 до 9999. Если вы планируете сгенерировать все 10000 из них, то вам нужно просто сделать что-то, как сказал Уорвикер, и вести список всех неиспользуемых значений. *

Я бы предложил начать с самого простого алгоритма (выбрать случайное число от 1 до 9999) и использовать его, пока он не станет слишком медленным. Затем вернитесь и вставьте Earwicker's.

0 голосов
/ 05 марта 2009
Random randomNumberGenerator = new Random();
return string.Concat(
    randomNumberGenerator.Next(0, 9),
    randomNumberGenerator.Next(0, 9),
    randomNumberGenerator.Next(0, 9),
    randomNumberGenerator.Next(0, 9));
0 голосов
/ 05 марта 2009

Создайте четыре случайных числа каждое из 0-9, а затем выполните для них конкатенацию строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...