2010-10-13 5 views
3

У меня есть функция, которая использует рандомизированные числа для генерации своего вывода. Я хотел бы, чтобы семена этих случайных чисел с длинной строки; до тех пор, пока строка будет одинаковой, последовательность случайных чисел будет одинаковой. Это в основном для целей тестирования, но также и для повторяемости.Создание случайной последовательности из строки

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

MyRandom mr = new MyRandom(100, "This is a really long string..."); 

Это создает внутренний список номеров, так что, когда mr.Next() называется просто возвращает следующую запись в списке. Когда он достигает 100, список просто обертывается. Я хотел бы иметь возможность вызвать .NextDouble() тоже. Это не должно быть ничего высокого качества, я просто хочу, чтобы иметь возможность генерировать случайный список и использовать его снова.

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

Это разумный способ сделать это или есть другой, лучший метод?

ответ

5

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

Если вы хотите инициализировать Random используя значение string по какой-то причине, то вы можете просто использовать new Random(str.GetHashCode()).

0

Java программист здесь ..

Почему не только инициализировать генератор случайных чисел с хэш-код строки, и использовать его как нормальный?

6

Звучит немного странно. Вы ищете что-то вроде этого?

Random rnd = new Random("Your string".GetHashCode()); 
Console.WriteLine(rnd.Next()); 

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

+3

'GetHashCode()' не всегда возвращает тот же номер. Значение может измениться, если вы перезапустите приложение. – jasdefer

Смежные вопросы