Рандомные не повторяющиеся числа.

Venomancer

Новичок
Регистрация
07.11.2011
Сообщения
21
Благодарностей
0
Баллы
0
Подскажите как счетчику присваивать случайное число в диапазоне, несколько раз в шаблоне и чтобы эти случайные числа не повторялись.
:-)
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 714
Баллы
113
Складывайте все числа в список и при использовании нового проверяйте не содержится ли оно уже в списке этом. Как вариант.
 

Hungry Bulldozer

Moderator
Регистрация
12.01.2011
Сообщения
3 441
Благодарностей
834
Баллы
113
При генерации рандомных чисел возможны повторения. Потому что в любом случае это псевдо рандом. Если нужны числа с хорошим разбросом, то можно домножать например на 10000 диапазон в котором идет генерация.
Например нужно число от 1 до 9, тогда генерим от 1*10000 до 10(так как крайнее число не включается в генерацию добавляем 1)*10000
в итоге генерим от 10000 до 100000. Например получили 24388 теперь делим нацело на 10000 получаем сгенеренное число 2.
Также Антон предложил отличный и более простой вариант.
 
  • Спасибо
Реакции: Venomancer

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 311
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

самый рациональный подход - 1 раз сгенерить диапазон в файл и брать из списка случайную строку с удалением.
избавитесь от лишних проверок, меньше ресурсов и времени затратите.
 
  • Спасибо
Реакции: Venomancer

Venomancer

Новичок
Регистрация
07.11.2011
Сообщения
21
Благодарностей
0
Баллы
0
самый рациональный подход - 1 раз сгенерить диапазон в файл и брать из списка случайную строку с удалением.
избавитесь от лишних проверок, меньше ресурсов и времени затратите.
А как же много поточный режим? Он будет брать из одного файла?

Складывайте все числа в список и при использовании нового проверяйте не содержится ли оно уже в списке этом. Как вариант.
Вы про массив Java? Я других не наше в Zenno
Спасибо
 

shade

Client
Регистрация
19.11.2010
Сообщения
580
Благодарностей
346
Баллы
63
А как же много поточный режим? Он будет брать из одного файла?


Вы про массив Java? Я других не наше в Zenno
Спасибо
Если диапазон чисел большой и генераций не очень много. То вот пример.
 

Вложения

  • Спасибо
Реакции: djony

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113
А как же много поточный режим? Он будет брать из одного файла?
Каждый поток будет брать свою строку и удалять её из файла, таким образом со многопотоком проблем не будет.

Вы про массив Java? Я других не наше в Zenno
А тут имелось ввиду наоборот сохранение в файл данных, которые были сгенерированы при выполнении.
 

Vik89

Client
Регистрация
05.11.2014
Сообщения
71
Благодарностей
14
Баллы
8
Складывайте все числа в список и при использовании нового проверяйте не содержится ли оно уже в списке этом. Как вариант.
А как проверить не содержится ли число в списке?
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113
А как проверить не содержится ли число в списке?
var check = project.Variables["url"].Value; // имя переменной, которую нужно найти
var list = project.Lists["List"]; // имя списка, в котором ищем
return list.IndexOf(check); // выдаст "-1" если строки нет или номер строки, в которой найден нужный текст.
 
  • Спасибо
Реакции: phirelli и Vik89

Vik89

Client
Регистрация
05.11.2014
Сообщения
71
Благодарностей
14
Баллы
8
Последнее редактирование модератором:

djony

Client
Регистрация
17.12.2014
Сообщения
67
Благодарностей
9
Баллы
8
Кому интересно, чуть чуть поправил код, готовый список, проверил от 1 до 10(10 не вкл.)

Код:
// получаем массив
string value = project.Variables["array"].Value;
int n = Convert.ToInt32(project.Variables["max"].Value.Trim());
List<int> array = new List<int>();
if (!String.IsNullOrWhiteSpace(value))
{
    string[] split = value.Split(new [] {";"}, StringSplitOptions.RemoveEmptyEntries);
    foreach (string str in split) array.Add(Convert.ToInt32(str.Trim()));
}

// генерируем значение
var rnd = new Random();

for(int i=0;i<n;i++)
{
    int next = rnd.Next(Convert.ToInt32(project.Variables["min"].Value.Trim()), Convert.ToInt32(project.Variables["max"].Value.Trim()));
    if (!array.Contains(next))
    {
        // добавим значение
        array.Add(next);
        // запомним в массиве
        project.Variables["array"].Value = String.Join(";", array);
        // вернём результат
        return next;
    }
}
код c проекта от пользователя shade
 
  • Спасибо
Реакции: phirelli

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)