![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Retro |
|
|||
![]() Диалектик ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1934 Регистрация: 28.6.2005 Где: Киев Репутация: 9 Всего: 117 |
На написание данного кода меня подвигнул участник форума - Legolas. Ему требовалось перемешать строки в файле случайным образом. Поскольку меня привлекает работа с цифрами в общем и с "случайными числами" в частности я честно подумал над вопросом, поискал в интернете код для .NET и наткнулся на пустоту, точнее были некие варианты но настолько закрученные, что я сомневался в их пригодности. Задача сводилась к тому как получить случайные числа для некого интервала, причем без их повторения. Ничего не найдя в интернете(возможно не так или не там искал) я задался вопросом, а зачем нужны многочисленные проверки, зачем генерировать случайное число если оно уже выпало. Так родился следующий код с использованием удобных методов ArrayList'a:
Это сообщение отредактировал(а) Exception - 5.5.2007, 17:10 |
|||
|
||||
| Exception |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Более универсальный вариант:
Пример:
Код писался в браузере, так что возможна необходимость подточить его напильником Это сообщение отредактировал(а) Exception - 5.5.2007, 17:21 |
||||
|
|||||
| Retro |
|
|||
![]() Диалектик ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1934 Регистрация: 28.6.2005 Где: Киев Репутация: 9 Всего: 117 |
Exception, весь прикол был в том, чтобы заданные элементы не повторялись. Я немного "подточил твой код напильником"
Он таки да тасует слово(зачем нужно пробел использовать?) только значения повторяются. Например "г б г г". Добавлено через 5 минут и 59 секунд Exception, че-то у меня не получается со строками. Можно пример? |
|||
|
||||
| Legolas |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 2 Всего: 5 |
Отличный код, спасибо Retro!
|
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Да уж привычка - это плохо. Retro, лови +1. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| Exception |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Тьфу Знал же, что о чём-нибудь забуду. Теоретически,
Практически, у меня нет компилятора уже две недели (и вряд ли скоро появится |
||||
|
|||||
| Retro |
|
|||
![]() Диалектик ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1934 Регистрация: 28.6.2005 Где: Киев Репутация: 9 Всего: 117 |
||||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Мы решили эту проблему похожим способом, но он мне кажется более оптимальным.
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 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Должно работать (алгоритм Сергея). Прошу прощения за выпендрёж с Fold Это сообщение отредактировал(а) Exception - 5.5.2007, 18:10 |
|||
|
||||
| STRELOKBMSTU |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 11.8.2007 Где: Russia.MR.Moscow( ); Репутация: нет Всего: нет |
И в каком пространстве имен находится эта удивительная функция??? У меня комп ее не видит( |
|||
|
||||
| Retro |
|
|||
![]() Диалектик ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1934 Регистрация: 28.6.2005 Где: Киев Репутация: 9 Всего: 117 |
||||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |