NerakSeven Ответов: 3

Как я делаю метод назначения случайного числа, не повторяющегося в списке пользователей?


Мне нужно создать приложение с архитектурой mvc arquitecture. Мне нужно сгенерировать ramdom numbers 4 цифры (не повторяются) для пользователей моего приложения. Я имею в виду , что этот метод ставит на контроллер пользователя, генерирует числа и показывает его в виде списка (user + numbers asign). как пароль

У вас есть какие-нибудь идеи? извините за мой английский
Мне это нужно для теста

Что я уже пробовал:

 public class User
    {

        [Key]
        public int UserId { get; set; }

       
        public int code { get; set; } // random number

       
        public string Name { get; set; }


        
        

        
    }
}




public class UserController : Controller
   {
       private DbContext db = new DbContext();

       // GET: Users
       public ActionResult Index()
       {
           var users = db.Users.Include(c => c.Lista);
           return View(users.ToList());
       }

3 Ответов

Рейтинг:
2

Patrice T

Цитата:
Мне нужно сгенерировать числа ramdom 4 цифры (не повторяются)

Вы должны сделать выбор!
Случайное и не повторяющееся являются взаимоисключающими.
Случайность подразумевает возможность повторения, а отсутствие повторения подразумевает не случайность.
Если вы решили не повторять, подумайте об алгоритмах перетасовки
Перетасовка-Википедия[^]
Другие методы, которые отслеживают ранее выбранное число, снижаются вместе с количеством выбранных чисел, поскольку становится все труднее и труднее выбрать неиспользуемое число.


NerakSeven

thnks fr Th объяснение

Рейтинг:
1

George Swan

Я не знаю диапазона ваших случайных чисел, но если это всего лишь несколько тысяч, вы можете инициализировать List и случайным образом индексировать в List удаляя каждое выбранное число по мере продвижения. Что-то вроде этого.


Random random = new Random();
int upperBound = 1000;
List<int> Choices = Enumerable.Range(0, upperBound).ToList();
//Generate 1000 unique random numbers in the inclusive range 0-999
for(int i=0;i<upperBound;i++)
{
int index = random.Next(0, Choices.Count);
int choice = Choices[index];
Choices.RemoveAt(index);
}


Рейтинг:
0

phil.o

Код, который генерирует случайное число между 1000 и 9999, является

int randomNumber = Random.Next(1000, 10000);

Теперь, если вы хотите обеспечить уникальность этого числа, вы должны отслеживать предыдущие сгенерированные значения. Самый простой способ-это использовать HashSet:
HashSet<int> generatedNumbers = new HashSet<int>();
int randomNumber;

// Keep generating a random number until an unused value is found
do {
   randomNumber = Random.Next(1000, 10000);
} while (generatedNumbers.Contains(randomNumber));

generatedNumbers.Add(randomNumber);

// From here you have your random number that you can use
// This number has been added to the set so that it will not be chosen for next usages

Надеюсь, это поможет. Любезно.


NerakSeven

thnks много, я попробую