fellanmorgh Ответов: 2

Можно ли не отображать предыдущий случайный элемент из списка?


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

List<Animal> animals = new List();


Которые обладают следующими свойствами

public string Name
{
    get { return _name; }
    set { _name = value; }
}

public string Specie
{
    get { return _specie; }
    set { _specie = value; }
}


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

Это имя объекта или вид затем случайным образом генерируется в текстовых полях:

private string RandomAnimal(Random r)
{
    if (random.Next(2) == 0)
    {
        txtSpecie.Text = randomAnimal.Specie;
        return randomAnimal.Specie;
    }
    else
    {
        txtName.Text = randomAnimal.Name;
        return randomAnimal.Name;
    }
}


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

Заранее спасибо

2 Ответов

Рейтинг:
4

OriginalGriff

Простое решение?
Скопируйте список:

List<Animal> takeFromHere = new List<Animal>(animals)

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


fellanmorgh

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

OriginalGriff

Да. См. выше код.

Рейтинг:
2

CPallini

Если я вас поймал, то вам нужно избегать повторений в случайных выборках. Взгляните на мой Случайное извлечение 5 карт из колоды[^]. Это так C++ код, но я думаю, что вы легко могли бы понять эту идею.