NOSSAL Ответов: 2

Как выбрать случайный элемент из массива char и назначить его списку


У меня есть массив char (A) и массив int(B). Я хочу случайным образом выбрать элементы из массива A(выбранные элементы должны быть уникальными) и объединить их с элементами массива B из первого элемента. Добавьте сцепленные элементы в список строк.
Моя проблема в том, что выбранные элементы не уникальны.

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

List<string> AB_Concat = new List<string>();
Random random = new Random();
for(int i=0;i<26;i++)
    AB_Concat.Add(Convert.ToString(A[random.Next(i, A.Length)]) + Convert.ToString(B[i]));

for (int i = 0; i < 26; i++)
   Console.Write(AB_Concat[i] + " ");

Patrice T

А у вас есть вопрос ? или проблема ?

2 Ответов

Рейтинг:
19

OriginalGriff

Если вам нужны уникальные символы из массива а - то есть он похож на колоду карт, у вас может быть только один из них, - то вам нужно удалить каждый символ из входных данных при его использовании.
Самый простой способ сделать это-преобразовать массив в список и каждый раз использовать RemoveAt:

List<string> AB_Concat = new List<string>();
List<char> data = A.ToList();
Random random = new Random();
for (int i = 0; i < 26; i++)
    {
    int index = random.Next(data.Count);
    AB_Concat.Add(Convert.ToString(data[index]) + Convert.ToString(B[i]));
    data.RemoveAt(index);
    }
for (int i = 0; i < 26; i++)
    {
    Console.Write(AB_Concat[i] + " ");
    }


Рейтинг:
10

Richard MacCutchan

Вам нужно использовать коллекцию, которая не допускает дубликатов, например Класс HashSet(T) (System.Коллекции.Общий)[^]. Затем вам также нужно будет добавить код, чтобы продолжать добавлять до тех пор, пока набор не будет содержать 26 элементов, а не просто повторять свой список 26 раз.