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

devffy

Client
Регистрация
16.03.2019
Сообщения
541
Благодарностей
188
Баллы
43
Всем привет. Может ли кто-н помочь?
Нужно 10 случайных чисел диапазоне от 0 до 100 без повторов с# и все это положить в 10 переменных
 

Samoylov_83

Client
Регистрация
25.08.2015
Сообщения
228
Благодарностей
70
Баллы
28
на кубиках можно быстро сделать. в список добавь 100 строк и бери с удалением.
 
  • Спасибо
Реакции: devffy

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
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];
// дальше по аналогии
 
  • Спасибо
Реакции: kagorec и devffy

devffy

Client
Регистрация
16.03.2019
Сообщения
541
Благодарностей
188
Баллы
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
Регистрация
28.12.2018
Сообщения
732
Благодарностей
343
Баллы
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();
        }
 
  • Спасибо
Реакции: devffy и Astraport

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 980
Благодарностей
4 433
Баллы
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();
 
  • Спасибо
Реакции: specialist

specialist

Client
Регистрация
28.12.2018
Сообщения
732
Благодарностей
343
Баллы
63
Надо бы в цикле массивы с исходными данными создать)
С одной стороны да, с другой нет.

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

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

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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
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 штучек ?
немного неэффективное использование памяти , не правда ли ?
 
  • Спасибо
Реакции: devffy

specialist

Client
Регистрация
28.12.2018
Сообщения
732
Благодарностей
343
Баллы
63
неэффективное использование памяти , не правда ли ?
Решаем конкретную задачу, а не универсальную.
Сколько памяти дополнительно потребуется для enumerate или range посмотрите, по сравнению с прямым объявлением.

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

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

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
а если надо 10 из 10 000 000 и не повторяющихся ? делать массив на 10 лямов элементов ради выборки 10 штучек ?
немного неэффективное использование памяти , не правда ли ?
Ты же понимаешь, что под твой код тоже можно создать условия, при котором он будет неэффективно использовать ресурсы?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Ты же понимаешь, что под твой код тоже можно создать условия, при котором он будет неэффективно использовать ресурсы?
нет. не понимаю. будут другие условия , будет другое решение.
на эти условия я свой вариант выложил, на этом все. помощь оказана. кому надо тот воспользуется, кому не надо пусть пишет свой код.
Если вы в этой теме хотите посоревноваться у кого код лучше , вперед и с песней :-)
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
нет. не понимаю. будут другие условия , будет другое решение.
на эти условия я свой вариант выложил, на этом все. помощь оказана. кому надо тот воспользуется, кому не надо пусть пишет свой код.
Если вы в этой теме хотите посоревноваться у кого код лучше , вперед и с песней :-)
так тебе человек тоже самое написал "решаем конкретную задачу". Ты зачем-то привёл новые условия при которых якобы будет расход памяти. Если в твой метод привнести новые условия, расход тоже будет, хоть и не памяти
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
так тебе человек тоже самое написал "решаем конкретную задачу". Ты зачем-то привёл новые условия при которых якобы будет расход памяти. Если в твой метод привнести новые условия, расход тоже будет, хоть и не памяти
да решайте сами свою "конкретную" задачу. как хотите и чем хотите.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
  • Спасибо
Реакции: material

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Сам начал с упрёка, а когда получил симметричный ответ - тут же поплыл. Ты странный
хорошо. я странный. попридержу тогда свои странности при себе. зря выложил тут парочку своих решений. спасибо тебе добрый человек, ты научил меня не тратить свое время на такую херню как помощь . в самом деле нафига я вообще тратил свое бесценное странное время на написание кода никому не нужного. в следующий раз я точно не совершу такой ошибки.
 
  • Спасибо
Реакции: devffy

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
хорошо. я странный. попридержу тогда свои странности при себе. зря выложил тут парочку своих решений. спасибо тебе добрый человек, ты научил меня не тратить свое время на такую херню как помощь . в самом деле нафига я вообще тратил свое бесценное странное время на написание кода никому не нужного. в следующий раз я точно не совершу такой ошибки.
таких тараканов действительно лучше держать при себе
 

specialist

Client
Регистрация
28.12.2018
Сообщения
732
Благодарностей
343
Баллы
63
тратил свое бесценное странное время на написание кода никому не нужного.
Этот код был нужен топикстартеру, так что не зря тратили, помогли ему.

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

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

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

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

p.s.

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

molotok

Client
Регистрация
17.04.2015
Сообщения
733
Благодарностей
358
Баллы
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);
}
 

Вложения

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
прикольно. оказывается здесь есть функция игнор :-) нажал на профиль флудера и в игнор :-) класс. вообще ни одного сообщения не видно от ... не помню как его там. да и фиг с ним. я его все равно не увижу теперь никогда :-)
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Этот код был нужен топикстартеру, так что не зря тратили, помогли ему.

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

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

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

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

p.s.

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

braind

Client
Регистрация
10.10.2012
Сообщения
119
Благодарностей
12
Баллы
18
Помогите плиз с кодом для двойного рандома?
Мне нужно сначала получить случайное число сколько фоток просматривать, например 1-3
И потом получить не повторяющиеся значения какие фотки смотреть, от 1 до Х
 

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
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;
            }
 
  • Спасибо
Реакции: Alexmd

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 423
Баллы
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 и Sergodjan

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
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);
 

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