10 случайных чисел диапазоне от 0 до 100 без повторов с#

devffy

Client
Joined
Mar 16, 2019
Messages
541
Reaction score
188
Points
43
Всем привет. Может ли кто-н помочь?
Нужно 10 случайных чисел диапазоне от 0 до 100 без повторов с# и все это положить в 10 переменных
 

Samoylov_83

Client
Joined
Aug 25, 2015
Messages
228
Reaction score
70
Points
28
на кубиках можно быстро сделать. в список добавь 100 строк и бери с удалением.
 
  • Thank you
Reactions: devffy

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
C#:
var list1 = new List <string> () ;
int is_repiat;
int data_rnd;
for (int i = 1; i <=10; i++) {
    data_rnd =     Global.Classes.rnd.Next(0, 100);
    is_repiat=0;
    for (int i_list = 0; i_list<list1.Count; i_list++) {
        if ( data_rnd.ToString() == list1[i_list] ) {           
            is_repiat=1;
            break;
        }
    }
    if (is_repiat == 1) i=i-1;
    else {
        string data_rnd_str=data_rnd.ToString();
        list1.Add(data_rnd_str);
    }
}

project.Variables["var1"].Value = list1[0];
project.Variables["var2"].Value = list1[1];
project.Variables["var3"].Value = list1[2];
// дальше по аналогии
 
  • Thank you
Reactions: kagorec and devffy

devffy

Client
Joined
Mar 16, 2019
Messages
541
Reaction score
188
Points
43
C#:
var list1 = new List <string> () ;
int is_repiat;
int data_rnd;
for (int i = 1; i <=10; i++) {
    data_rnd =     Global.Classes.rnd.Next(0, 100);
    is_repiat=0;
    for (int i_list = 0; i_list<list1.Count; i_list++) {
        if ( data_rnd.ToString() == list1[i_list] ) {          
            is_repiat=1;
            break;
        }
    }
    if (is_repiat == 1) i=i-1;
    else {
        string data_rnd_str=data_rnd.ToString();
        list1.Add(data_rnd_str);
    }
}

project.Variables["var1"].Value = list1[0];
project.Variables["var2"].Value = list1[1];
project.Variables["var3"].Value = list1[2];
// дальше по аналогии
Огромное спасибо!
 

specialist

Client
Joined
Dec 28, 2018
Messages
732
Reaction score
343
Points
63
C#:
        // список переменных зеннопостера для заполнения
        string[] zennoposterVariablesName = { "var1", "var2", "var3", "var4", "var5", "var6", "var7", "var8", "var9", "var10" };

        // список из каких значений выбираем
        List<int> numbers = new List<int>() {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100};
        
        Random rnd = new Random();
        
        // как в кубике, выбираем случайный элемент с удалением по индексу
        foreach(string variablesName in zennoposterVariablesName)
        {
            int index = rnd.Next(numbers.Count);
            int elem = numbers[index];
            numbers.RemoveAt(index);

            // присваиваем значение переменной
            project.Variables[variablesName].Value = elem.ToString();
        }
 

Astraport

Client
Joined
May 1, 2015
Messages
5,002
Reaction score
4,468
Points
113
C#:
        // список переменных зеннопостера для заполнения
        string[] zennoposterVariablesName = { "var1", "var2", "var3", "var4", "var5", "var6", "var7", "var8", "var9", "var10" };

        // список из каких значений выбираем
        List<int> numbers = new List<int>() {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100};
      
        Random rnd = new Random();
      
        // как в кубике, выбираем случайный элемент с удалением по индексу
        foreach(string variablesName in zennoposterVariablesName)
        {
            int index = rnd.Next(numbers.Count);
            int elem = numbers[index];
            numbers.RemoveAt(index);

            // присваиваем значение переменной
            project.Variables[variablesName].Value = elem.ToString();
        }
Надо бы в цикле массивы с исходными данными создать)
И проще вообще перемешать массив так:
C#:
Random rnd=new Random();
int[] MyRandomArray = numbers.OrderBy(x => rnd.Next()).ToArray();
 
  • Thank you
Reactions: specialist

specialist

Client
Joined
Dec 28, 2018
Messages
732
Reaction score
343
Points
63
Надо бы в цикле массивы с исходными данными создать)
С одной стороны да, с другой нет.

zennoposterVariablesName - переменные возможно создавать на автомате, недавно тема поднималась, как это сделать. Но бывают шаблоны, когда переменные созданы заранее и еще где-то используется, поэтому предложил такой вариант решения.

List<int> numbers - привязал к типу int, но по факту там могут быть и другие типы, чаще всего строки. Числа могут идти не по порядку, а с пропусками, либо это идентификаторы чего-либо, например номера товаров которые кликнуть.

Когда не пишут зачем это им нужно и почему тупо не использовать зеновский список в цикле с удалением вместо переменных, ответы и будут такими
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
C#:
        // список переменных зеннопостера для заполнения
        string[] zennoposterVariablesName = { "var1", "var2", "var3", "var4", "var5", "var6", "var7", "var8", "var9", "var10" };

        // список из каких значений выбираем
        List<int> numbers = new List<int>() {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100};
       
        Random rnd = new Random();
       
        // как в кубике, выбираем случайный элемент с удалением по индексу
        foreach(string variablesName in zennoposterVariablesName)
        {
            int index = rnd.Next(numbers.Count);
            int elem = numbers[index];
            numbers.RemoveAt(index);

            // присваиваем значение переменной
            project.Variables[variablesName].Value = elem.ToString();
        }
а если надо 10 из 10 000 000 и не повторяющихся ? делать массив на 10 лямов элементов ради выборки 10 штучек ?
немного неэффективное использование памяти , не правда ли ?
 
  • Thank you
Reactions: devffy

specialist

Client
Joined
Dec 28, 2018
Messages
732
Reaction score
343
Points
63
неэффективное использование памяти , не правда ли ?
Решаем конкретную задачу, а не универсальную.
Сколько памяти дополнительно потребуется для enumerate или range посмотрите, по сравнению с прямым объявлением.

вообще перемешать массив так
Как вариант. В коде выше скопировал логику работы зенки со списками, есть готовый список, выбрать элемент, после удалить.

Так решений множество, например, сгенерировать рандомом с запасом значения, удалить дубли, взять первые 10.
 

doc

Client
Joined
Mar 30, 2012
Messages
8,685
Reaction score
4,648
Points
113
а если надо 10 из 10 000 000 и не повторяющихся ? делать массив на 10 лямов элементов ради выборки 10 штучек ?
немного неэффективное использование памяти , не правда ли ?
Ты же понимаешь, что под твой код тоже можно создать условия, при котором он будет неэффективно использовать ресурсы?
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
Ты же понимаешь, что под твой код тоже можно создать условия, при котором он будет неэффективно использовать ресурсы?
нет. не понимаю. будут другие условия , будет другое решение.
на эти условия я свой вариант выложил, на этом все. помощь оказана. кому надо тот воспользуется, кому не надо пусть пишет свой код.
Если вы в этой теме хотите посоревноваться у кого код лучше , вперед и с песней :-)
 

doc

Client
Joined
Mar 30, 2012
Messages
8,685
Reaction score
4,648
Points
113
нет. не понимаю. будут другие условия , будет другое решение.
на эти условия я свой вариант выложил, на этом все. помощь оказана. кому надо тот воспользуется, кому не надо пусть пишет свой код.
Если вы в этой теме хотите посоревноваться у кого код лучше , вперед и с песней :-)
так тебе человек тоже самое написал "решаем конкретную задачу". Ты зачем-то привёл новые условия при которых якобы будет расход памяти. Если в твой метод привнести новые условия, расход тоже будет, хоть и не памяти
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
так тебе человек тоже самое написал "решаем конкретную задачу". Ты зачем-то привёл новые условия при которых якобы будет расход памяти. Если в твой метод привнести новые условия, расход тоже будет, хоть и не памяти
да решайте сами свою "конкретную" задачу. как хотите и чем хотите.
 

doc

Client
Joined
Mar 30, 2012
Messages
8,685
Reaction score
4,648
Points
113
да решайте сами свою "конкретную" задачу. как хотите и чем хотите.
Сам начал с упрёка, а когда получил симметричный ответ - тут же поплыл. Ты странный
 
  • Thank you
Reactions: material

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
Сам начал с упрёка, а когда получил симметричный ответ - тут же поплыл. Ты странный
хорошо. я странный. попридержу тогда свои странности при себе. зря выложил тут парочку своих решений. спасибо тебе добрый человек, ты научил меня не тратить свое время на такую херню как помощь . в самом деле нафига я вообще тратил свое бесценное странное время на написание кода никому не нужного. в следующий раз я точно не совершу такой ошибки.
 
  • Thank you
Reactions: devffy

doc

Client
Joined
Mar 30, 2012
Messages
8,685
Reaction score
4,648
Points
113
хорошо. я странный. попридержу тогда свои странности при себе. зря выложил тут парочку своих решений. спасибо тебе добрый человек, ты научил меня не тратить свое время на такую херню как помощь . в самом деле нафига я вообще тратил свое бесценное странное время на написание кода никому не нужного. в следующий раз я точно не совершу такой ошибки.
таких тараканов действительно лучше держать при себе
 

specialist

Client
Joined
Dec 28, 2018
Messages
732
Reaction score
343
Points
63
тратил свое бесценное странное время на написание кода никому не нужного.
Этот код был нужен топикстартеру, так что не зря тратили, помогли ему.

Предложенный далее вариант, ему уже не нужен, но он может потребоваться другим, его и обсуждали.

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

Если у вас написание кода отнимает такое драгоценное время, то стоит задуматься о том, что 15 строчек кода так долго не пишутся и стоит подтянуть знания.

Или создать тему, помогу за вознаграждение, затраченное время вполне окупится.

p.s.

В зависимости от структуры данных нужно использовать разные алгоритмы сортировок, т.к. скорость будет отличаться в разы. В зависимости от способа выбора случайного элемента будет меняться частота появления элементов, например, может чаще выбирать с начала списка. Эти темы бесконечны, так что если работает как надо, не трогай )
 
  • Thank you
Reactions: devffy

molotok

Client
Joined
Apr 17, 2015
Messages
742
Reaction score
366
Points
63
Еще одна вариация решения задачи
ProjectMaker_2019-09-25_20-23-46.jpg


C#:
List<int> lstNumber = new List<int>();
int number = 0;     
//Генерируем коллекцию случайных чисел
while(lstNumber.Count<10){
    number = Global.Classes.rnd.Next(0, 100);//Диапазон случайных чисел
    if(!lstNumber.Contains(number)) lstNumber.Add(number);
}
//Запись данных в переменные проекта
for(int i=0; lstNumber.Count>0 ;i++){
    project.Variables["var"+i.ToString()].Value = lstNumber[0].ToString();     lstNumber.RemoveAt(0);
}
 

Attachments

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
прикольно. оказывается здесь есть функция игнор :-) нажал на профиль флудера и в игнор :-) класс. вообще ни одного сообщения не видно от ... не помню как его там. да и фиг с ним. я его все равно не увижу теперь никогда :-)
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
Этот код был нужен топикстартеру, так что не зря тратили, помогли ему.

Предложенный далее вариант, ему уже не нужен, но он может потребоваться другим, его и обсуждали.

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

Если у вас написание кода отнимает такое драгоценное время, то стоит задуматься о том, что 15 строчек кода так долго не пишутся и стоит подтянуть знания.

Или создать тему, помогу за вознаграждение, затраченное время вполне окупится.

p.s.

В зависимости от структуры данных нужно использовать разные алгоритмы сортировок, т.к. скорость будет отличаться в разы. В зависимости от способа выбора случайного элемента будет меняться частота появления элементов, например, может чаще выбирать с начала списка. Эти темы бесконечны, так что если работает как надо, не трогай )
не вижу смысла обсуждать чьи либо знания. тем более давать советов что и где подтянуть. раз тема эффективности так сильно всех корежит, пусть каждый пишет свой код.
Давайте каждый останется при своих баранах и закроем уже эту глупую перепалку. одного в игнор отправил так он реально не по теме уже начал флудить.
топикстартеру помогли и все, закрываем тему.
 

braind

Client
Joined
Oct 10, 2012
Messages
119
Reaction score
12
Points
18
Помогите плиз с кодом для двойного рандома?
Мне нужно сначала получить случайное число сколько фоток просматривать, например 1-3
И потом получить не повторяющиеся значения какие фотки смотреть, от 1 до Х
 

viol2021

Client
Joined
Jan 12, 2021
Messages
482
Reaction score
181
Points
43
Помогите плиз с кодом для двойного рандома?
Мне нужно сначала получить случайное число сколько фоток просматривать, например 1-3
И потом получить не повторяющиеся значения какие фотки смотреть, от 1 до Х
C#:
            Random rnd = new Random();
            int[] array = Enumerable.Range(1, 9).ToArray();//Массив чисел от и до скольки генерировать
            int[] array2 = new int[3];//Массив чисел которые не должны повторяться
            int count = array2.Length - 1;
            while (count >= 0)
            {
                int newInt = array[rnd.Next(0, array.Length)];
                int newCount = array2.Where(x => x == newInt).Count();
                if (newCount < 1) array2[count] = newInt;
                count = array2.Where(x => x == 0).Count() - 1;
            }
 
  • Thank you
Reactions: Alexmd

Alexmd

Client
Joined
Dec 10, 2018
Messages
1,021
Reaction score
1,427
Points
113
C#:
            Random rnd = new Random();
            int[] array = Enumerable.Range(1, 9).ToArray();//Массив чисел от и до скольки генерировать
            int[] array2 = new int[3];//Массив чисел которые не должны повторяться
            int count = array2.Length - 1;
            while (count >= 0)
            {
                int newInt = array[rnd.Next(0, array.Length)];
                int newCount = array2.Where(x => x == newInt).Count();
                if (newCount < 1) array2[count] = newInt;
                count = array2.Where(x => x == 0).Count() - 1;
            }
C#:
var list = project.Lists["list"];
int count = 3+1;
return string.Join("\n", list.Distinct().OrderBy(x=>Guid.NewGuid()).Take(new Random().Next(1, count > list.Count ? list.Count : count)));
 

viol2021

Client
Joined
Jan 12, 2021
Messages
482
Reaction score
181
Points
43
C#:
var list = project.Lists["list"];
int count = 3+1;
return string.Join("\n", list.Distinct().OrderBy(x=>Guid.NewGuid()).Take(new Random().Next(1, count > list.Count ? list.Count : count)));
C#:
IEnumerable<int> arrayIndex = Enumerable.Range(1, 100).OrderBy(x => Guid.NewGuid()).Take(10);
 

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)