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

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

devffy

Client
Регистрация
16.03.2019
Сообщения
544
Реакции
189
Баллы
43
Всем привет. Может ли кто-н помочь?
Нужно 10 случайных чисел диапазоне от 0 до 100 без повторов с# и все это положить в 10 переменных
 
на кубиках можно быстро сделать. в список добавь 100 строк и бери с удалением.
 
  • Спасибо
Реакции: devffy
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
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];
// дальше по аналогии
Огромное спасибо!
 
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
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
Надо бы в цикле массивы с исходными данными создать)
С одной стороны да, с другой нет.

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

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

Когда не пишут зачем это им нужно и почему тупо не использовать зеновский список в цикле с удалением вместо переменных, ответы и будут такими
 
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
неэффективное использование памяти , не правда ли ?
Решаем конкретную задачу, а не универсальную.
Сколько памяти дополнительно потребуется для enumerate или range посмотрите, по сравнению с прямым объявлением.

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

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

нет. не понимаю. будут другие условия , будет другое решение.
на эти условия я свой вариант выложил, на этом все. помощь оказана. кому надо тот воспользуется, кому не надо пусть пишет свой код.
Если вы в этой теме хотите посоревноваться у кого код лучше , вперед и с песней :)
 
нет. не понимаю. будут другие условия , будет другое решение.
на эти условия я свой вариант выложил, на этом все. помощь оказана. кому надо тот воспользуется, кому не надо пусть пишет свой код.
Если вы в этой теме хотите посоревноваться у кого код лучше , вперед и с песней :-)
так тебе человек тоже самое написал "решаем конкретную задачу". Ты зачем-то привёл новые условия при которых якобы будет расход памяти. Если в твой метод привнести новые условия, расход тоже будет, хоть и не памяти
 
так тебе человек тоже самое написал "решаем конкретную задачу". Ты зачем-то привёл новые условия при которых якобы будет расход памяти. Если в твой метод привнести новые условия, расход тоже будет, хоть и не памяти

да решайте сами свою "конкретную" задачу. как хотите и чем хотите.
 
  • Спасибо
Реакции: material
Сам начал с упрёка, а когда получил симметричный ответ - тут же поплыл. Ты странный
хорошо. я странный. попридержу тогда свои странности при себе. зря выложил тут парочку своих решений. спасибо тебе добрый человек, ты научил меня не тратить свое время на такую херню как помощь . в самом деле нафига я вообще тратил свое бесценное странное время на написание кода никому не нужного. в следующий раз я точно не совершу такой ошибки.
 
  • Спасибо
Реакции: devffy
хорошо. я странный. попридержу тогда свои странности при себе. зря выложил тут парочку своих решений. спасибо тебе добрый человек, ты научил меня не тратить свое время на такую херню как помощь . в самом деле нафига я вообще тратил свое бесценное странное время на написание кода никому не нужного. в следующий раз я точно не совершу такой ошибки.
таких тараканов действительно лучше держать при себе
 
тратил свое бесценное странное время на написание кода никому не нужного.
Этот код был нужен топикстартеру, так что не зря тратили, помогли ему.

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

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

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

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

p.s.

В зависимости от структуры данных нужно использовать разные алгоритмы сортировок, т.к. скорость будет отличаться в разы. В зависимости от способа выбора случайного элемента будет меняться частота появления элементов, например, может чаще выбирать с начала списка. Эти темы бесконечны, так что если работает как надо, не трогай )
 
  • Спасибо
Реакции: devffy
Еще одна вариация решения задачи
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);
}
 

Вложения

прикольно. оказывается здесь есть функция игнор :) нажал на профиль флудера и в игнор :) класс. вообще ни одного сообщения не видно от ... не помню как его там. да и фиг с ним. я его все равно не увижу теперь никогда :)
 
Этот код был нужен топикстартеру, так что не зря тратили, помогли ему.

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

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

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

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

p.s.

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

не вижу смысла обсуждать чьи либо знания. тем более давать советов что и где подтянуть. раз тема эффективности так сильно всех корежит, пусть каждый пишет свой код.
Давайте каждый останется при своих баранах и закроем уже эту глупую перепалку. одного в игнор отправил так он реально не по теме уже начал флудить.
топикстартеру помогли и все, закрываем тему.
 
  • Спасибо
Реакции: devffy и specialist
Помогите плиз с кодом для двойного рандома?
Мне нужно сначала получить случайное число сколько фоток просматривать, например 1-3
И потом получить не повторяющиеся значения какие фотки смотреть, от 1 до Х
 
Помогите плиз с кодом для двойного рандома?
Мне нужно сначала получить случайное число сколько фоток просматривать, например 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
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
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);
 

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