Как получить случайное число без повторений.

Veterinar

Client
Регистрация
01.07.2016
Сообщения
194
Благодарностей
22
Баллы
18
Доброго времени суток.

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

Для проверки я использовал список содержащий цифры с именами папок от 1 и т.д. до 300 и список при каждом отправленном посте пополняется на ещё одну случайную цифру например 15 и т.д.

Для проверки был ли пост отправлен использовал следующий скрипт:
Код:
string str1 = project.Variables["Переменная1"].Value;
string str2 = project.Variables["Переменная2"].Value;
if (!str2.Contains(str1))
    return null;
Если скрипт выдавал положительный результат то стрелка возвращала к блоку Random

Но когда массив уже отправленных постов в файле тхт стал слишком большим Random начал по долгу зацикливаться.

Есть ли какой нибудь способ, в сниппете сделать, чтобы например рандомило в диапазоне между 1-10 но при это не затрагивало цифры 5 и 6 и другие которые уже есть в массиве отправленных постов?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 643
Баллы
113
можно генерирвать список 1-10. из него минусовать уже имеющиеся значения. из обработанного списка брать рандомную строку
 

Veterinar

Client
Регистрация
01.07.2016
Сообщения
194
Благодарностей
22
Баллы
18
можно генерирвать список 1-10. из него минусовать уже имеющиеся значения. из обработанного списка брать рандомную строку
Вы это имеете в виду?

Код:
string start = project.Variable["Переменная с началом диапазона"].Value;
string end = project.Variable["Переменная с концом диапазона"].Value;
int begining = int.Parse(start);
int ending = int.Parse(end);
Random rnd = new Random();
int[] val = Enumerable.Range(start, end).ToArray();
List<int> list = new List<val>();
list.Remove("Значения из переменной разделенные запятой");
list.Take<rnd>();
Не думаю что верно составил сниппет, так как выдало ошибку.
Но суть в "List"?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 643
Баллы
113
Тебе нужен не лист, а хэшсет. И в такой же хэшсет нужно загнать уже имеющиеся значения. дальше вычесть из 1го хэшсета второй. Из оставшихся записей в 1м взять рандомную строку
 
  • Спасибо
Реакции: sentinel

Veterinar

Client
Регистрация
01.07.2016
Сообщения
194
Благодарностей
22
Баллы
18
Тебе нужен не лист, а хэшсет. И в такой же хэшсет нужно загнать уже имеющиеся значения. дальше вычесть из 1го хэшсета второй. Из оставшихся записей в 1м взять рандомную строку
Не сразу допер что хэшсет это массив но проблему решил в общем вот код если кому надо пользуйтесь.

Код:
Random rnd = new Random();
string RndFolderOne = project.Variables["RandomFolderV1"].Value;
string RndFolderTwo = project.Variables["RandomFolderV2"].Value;
string BeenPostedStr = project.Variables["beenpostedInCurrentGroup"].Value;
int StartSecuanse = int.Parse(RndFolderOne);
int EndSecuanse = int.Parse(RndFolderTwo);
var sequance = Enumerable.Range(StartSecuanse, EndSecuanse).ToArray();
int[] BeenPosted = BeenPostedStr.Split('\n').Select(int.Parse).ToArray();
int[] PostNumber = sequance.Except(BeenPosted).ToArray();
int myFolder = PostNumber[rnd.Next(PostNumber.Length)];
return myFolder.ToString();
 
  • Спасибо
Реакции: Alexander174

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