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

  • Автор темы Автор темы Venomancer
  • Дата начала Дата начала

Venomancer

Новичок
Регистрация
07.11.2011
Сообщения
21
Реакции
0
Баллы
0
Подскажите как счетчику присваивать случайное число в диапазоне, несколько раз в шаблоне и чтобы эти случайные числа не повторялись.
:)
 
Складывайте все числа в список и при использовании нового проверяйте не содержится ли оно уже в списке этом. Как вариант.
 
При генерации рандомных чисел возможны повторения. Потому что в любом случае это псевдо рандом. Если нужны числа с хорошим разбросом, то можно домножать например на 10000 диапазон в котором идет генерация.
Например нужно число от 1 до 9, тогда генерим от 1*10000 до 10(так как крайнее число не включается в генерацию добавляем 1)*10000
в итоге генерим от 10000 до 100000. Например получили 24388 теперь делим нацело на 10000 получаем сгенеренное число 2.
Также Антон предложил отличный и более простой вариант.
 
  • Оценить
Реакции: Venomancer
самый рациональный подход - 1 раз сгенерить диапазон в файл и брать из списка случайную строку с удалением.
избавитесь от лишних проверок, меньше ресурсов и времени затратите.
 
  • Оценить
Реакции: Venomancer
самый рациональный подход - 1 раз сгенерить диапазон в файл и брать из списка случайную строку с удалением.
избавитесь от лишних проверок, меньше ресурсов и времени затратите.
А как же много поточный режим? Он будет брать из одного файла?

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


Вы про массив Java? Я других не наше в Zenno
Спасибо

Если диапазон чисел большой и генераций не очень много. То вот пример.
 

Вложения

  • Оценить
Реакции: djony
А как же много поточный режим? Он будет брать из одного файла?
Каждый поток будет брать свою строку и удалять её из файла, таким образом со многопотоком проблем не будет.

Вы про массив Java? Я других не наше в Zenno

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

А как проверить не содержится ли число в списке?
 
А как проверить не содержится ли число в списке?

var check = project.Variables["url"].Value; // имя переменной, которую нужно найти
var list = project.Lists["List"]; // имя списка, в котором ищем
return list.IndexOf(check); // выдаст "-1" если строки нет или номер строки, в которой найден нужный текст.
 
  • Оценить
Реакции: phirelli и Vik89
Кому интересно, чуть чуть поправил код, готовый список, проверил от 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

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