Как взять рандомный, уникальный элемент из массива?

Добрый вечер, друзья.
Есть Массив, в котором необходимо взять рандомный и обязательно уникальный элемент. Делаю так:
string[] Count = {"Украина","Казахстан","Беларусь", "Киргизия", "Эстония"};
int rnd = Random.Range(0, Countries.Length);

Но в итоге он берёт иногда одинаковые элементы. Подскажите пожалуйста, как сделать так, чтобы он не брал элементы, которые уже рандомил ?
Спасибо!
  • Вопрос задан
  • 1595 просмотров
Решения вопроса 1
Правильный способ - отсортировать рандомно массив и потом брать элементы по-очереди с первого. Гуглите по ключевому слову Shuffle.

array.Shuffle();

foreach (var randomItem in array) {
    Console.WriteLine( randomItem );
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Morpheus_God
@Morpheus_God
static void Main(string[] args)
        {
            Random rnd = new Random();

            string [] countries = { "Украина", "Казахстан", "Беларусь", "Киргизия", "Эстония","США" };

            List<string> uniqueCountry = new List<string>();
            int number;
            for (int i = 0; i < countries.Length; i++)
            {
                do
                {
                    number = rnd.Next(0, countries.Length);
                } while (uniqueCountry.Contains(countries[number]));
                uniqueCountry.Add(countries[number]);
            }

            foreach (var item in uniqueCountry)
            {
                Console.WriteLine(item);
            }   
            Console.ReadKey();
        }
Ответ написан
Собирать в массив уже выпавшие числа. Каждое следующее выпавшее число сравнивать с числами в массиве. Если это число уже было - роллить следующее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы