Исключения в Random.Range()

156
23 мая 2019, 01:50

Как сделать чтобы при генерации Random.Range(2, 15) сделать чтобы числа 5 и 11 не могли сгенерироваться то есть только числа

2 3 4 6 7 8 9 10 12 13 14 15 могли сгенриться!

Answer 1

Универсальный код для шарпа:

var _rand = new System.Random();//вообще эту штуку лучше вывести ЗА метод и не плодить инстансы этого класса внутри методов
private int RandomFromRangeWithExceptions(int rangeMin, int rangeMax, params int[] exclude)//exclude -- список чисел которые НЕ должны входить в результат
{
    var range = Enumerable.Range(rangeMin, rangeMax).Where(i => !exclude.Contains(i));//создаем  колекцию допустимых значений
    int index = _rand.Next(rangeMin, rangeMax - exclude.Count);//генерируем индекс ячейки
    return range.ElementAt(index);//возвращаем значение ячейки
}

Код оптимизированный под юнити:

private int RandomFromRangeWithExceptions(int rangeMin, int rangeMax, params int[] exclude)//exclude -- список чисел которые НЕ должны входить в результат
{
    var range = Enumerable.Range(rangeMin, rangeMax).Where(i => !exclude.Contains(i));//создаем  колекцию допустимых значений
    int index = Random.Range(rangeMin, rangeMax - exclude.Count);//генерируем индекс ячейки
    return range.ElementAt(index);//возвращаем значение ячейки
}

пример вызова:

RandomFromRangeWithExceptions(2, 15,   5, 11);

или

RandomFromRangeWithExceptions(1, 100,  5, 11, 14, 2, 99, 48);

Код базируется на этом ответе: https://stackoverflow.com/a/18485399/4423545

Код изменялся и не проверялся на наличие ошибок, но все должно пахать.

PS: Для удобства использования можно замутить этот метод как расширение к классу Random в случае Юнити.

READ ALSO
Таблица рекордов WinForms

Таблица рекордов WinForms

Подскажите, пожалуйста, как можно создать таблицу рекордов в Windows FormsПишу игру "Сапер"

176
Не могу понять, как реализовать деление на 2

Не могу понять, как реализовать деление на 2

Допустим у меня есть переменная int N = 19; Если я её поделю на 2 - получится 9,5 и выйдет ошибка (нужно что бы тип переменной оставался int)Есть еще...

128
Visual Studio не видит поле C#

Visual Studio не видит поле C#

Visual Studio не видит и не подсвечивает полеНо в окошке с просмотрами элементов файла он есть

113
Можно ли в C# проект зашить код python?

Можно ли в C# проект зашить код python?

У меня есть приложение на C# можно ли в него зашить python скрипт? Чтобы он сразу подгружался с кодом?

130