| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Random |
| Автор: Retro 3.5.2007, 18:58 | ||
На написание данного кода меня подвигнул участник форума - Legolas. Ему требовалось перемешать строки в файле случайным образом. Поскольку меня привлекает работа с цифрами в общем и с "случайными числами" в частности я честно подумал над вопросом, поискал в интернете код для .NET и наткнулся на пустоту, точнее были некие варианты но настолько закрученные, что я сомневался в их пригодности. Задача сводилась к тому как получить случайные числа для некого интервала, причем без их повторения. Ничего не найдя в интернете(возможно не так или не там искал) я задался вопросом, а зачем нужны многочисленные проверки, зачем генерировать случайное число если оно уже выпало. Так родился следующий код с использованием удобных методов ArrayList'a:
|
| Автор: Exception 3.5.2007, 20:50 | ||||
Более универсальный вариант:
Пример:
Код писался в браузере, так что возможна необходимость подточить его напильником |
| Автор: Retro 3.5.2007, 21:42 | ||
Exception, весь прикол был в том, чтобы заданные элементы не повторялись. Я немного "подточил твой код напильником"
Он таки да тасует слово(зачем нужно пробел использовать?) только значения повторяются. Например "г б г г". Добавлено через 5 минут и 59 секунд Exception, че-то у меня не получается со строками. Можно пример? |
| Автор: Legolas 4.5.2007, 00:09 |
| Отличный код, спасибо Retro! |
| Автор: Naum 4.5.2007, 10:41 |
Да уж привычка - это плохо. Retro, лови +1. |
| Автор: Retro 4.5.2007, 23:08 | ||
Ужос! |
| Автор: sergejzr 4.5.2007, 23:46 |
| Мы решили эту проблему похожим способом, но он мне кажется более оптимальным. 1) Создать массив неповторяющихся N чисел. (проинициализировав массив значениями min до max подряд) N=max-min 2) выбрать число по случаиному индексу массива i_rand ot rand(0,N) 3) переписать значение по индеху i_rand последним числом массива (числом по индеху N-1) 4) сделать N--; 5) GOTO 2; Таким образом не нужно никаких сторонних функций кроме rand() В этом единственное отличие от твоего способа. |
| Автор: Exception 5.5.2007, 18:08 | ||
Должно работать (алгоритм Сергея). Прошу прощения за выпендрёж с Fold |
| Автор: STRELOKBMSTU 13.8.2007, 23:42 | ||
И в каком пространстве имен находится эта удивительная функция??? У меня комп ее не видит( |
| Автор: Retro 14.8.2007, 09:16 | ||
Жесть какая. |