|
random в очереди ? - Вопросы и ответы, обсуждения - Ваши вопросы по C# только в данном разделе |
10.12.2012, 17:25
|
#1
|
|
|
|
Сержант
|
Регистрация: 06.06.2012
Сообщений: 131
Популярность: 102
Сказал(а) спасибо: 141
Поблагодарили 131 раз(а) в 78 сообщениях
|
random в очереди ?
У меня в Queue находятся строки к примеру 100 штук, возможно ли их рандомно раскидать ?
|
|
|
10.12.2012, 18:51
|
#2
|
|
|
|
Старший сержант
|
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
|
Re: random в очереди ?
Последний раз редактировалось Sinyss; 10.12.2012 в 18:56.
|
|
|
10.12.2012, 20:02
|
#3
|
|
|
|
Рыцарь-защитник
|
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
|
Re: random в очереди ?
Код:
List<string> strings = new List<string>();
for (int i = 0; i < 100; i++)
{
strings.Add(i.ToString());
}
List<string> stringsRandomed = new List<string>();
for (int i = 0; i < 100; i++)
{
int index = new Random(DateTime.Now.Millisecond).Next(0, strings.Count);
stringsRandomed.Add(strings[index]); strings.RemoveAt(index);
}
Как один из вариантов.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
|
|
|
10.12.2012, 20:09
|
#4
|
|
|
|
Старший сержант
|
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
|
Re: random в очереди ?
|
Цитата: |
|
|
|
|
|
|
|
|
|
Как один из вариантов.
|
|
|
|
|
|
int index = new Random(DateTime.Now.Millisecond).Next(0, strings.Count);
Вот так плохо делать... лучше вызывать из одного экземпляра...
Просто я сталкивался с ситуациями когда 2 объекта Random создавались практически одновременно и потом выдавали близкие значения...
И кстати new Random(DateTime.Now.Millisecond) вернет хотя бы 2 идентичных объекта... выполнение такой функции не займет даже миллисекунды...
Последний раз редактировалось Sinyss; 10.12.2012 в 20:12.
|
|
|
10.12.2012, 20:12
|
#5
|
|
|
|
Рыцарь-защитник
|
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
|
Re: random в очереди ?
|
Цитата: |
|
|
|
|
|
|
|
|
|
int index = new Random(DateTime.Now.Millisecond).Next(0, strings.Count);
Вот так плохо делать... лучше вызывать из одного экземпляра...
Просто я сталкивался с ситуациями когда 2 объекта Random создавались практически одновременно и потом выдавали близкие значения...
|
|
|
|
|
|
Окей, добавить:
(Естественно функцию вызвать в отдельном потоке)
Просто другого приемлемого сида для рандома нету.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
|
|
|
10.12.2012, 20:18
|
#6
|
|
|
|
Старший сержант
|
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
|
Re: random в очереди ?
Достаточно пустого конструктора, а в цикле просто вызывать Next() ...
|
|
|
10.12.2012, 20:23
|
#7
|
|
|
|
Рыцарь-защитник
|
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
|
Re: random в очереди ?
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
|
|
|
10.12.2012, 20:39
|
#8
|
|
|
|
Старший сержант
|
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
|
Re: random в очереди ?
|
|
|
10.12.2012, 20:40
|
#9
|
|
|
|
Сержант
|
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
|
Re: random в очереди ?
Код:
Random rnd = new Random();
public void Shuffle<T>(IEnumerable<T> list)
{
int n = list.Count;
while (n > 1)
{
n--;
int k = rnd.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
где то я уже выкладывал этот алгоритм перемешивания коллекций
________________
Talk is cheap. Show me the code
— Linus Torvalds
|
|
|
11.12.2012, 17:26
|
#10
|
|
|
|
Сержант
|
Регистрация: 06.06.2012
Сообщений: 131
Популярность: 102
Сказал(а) спасибо: 141
Поблагодарили 131 раз(а) в 78 сообщениях
|
Re: random в очереди ?
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 06:54.
|
|