VB.net - Параллельное перемешивание
массивов (mixx2)
Кроме перемешивания одномерного массива, бывает необходимость перемешать двумерный, или параллельно 2 одномерных массива.
Для этого воспользуемся следующим кодом.
'перемешивание 2 массивов
Public Sub mixx2(mas As Array, mas2 As Array)
Dim element1, element2, x, y, element12, element22, x2, y2
Randomize()
For i = 0 To 10000
x = Int(Rnd() * mas.Length) 'Определили знач случ массива с номером х
y = Int(Rnd() * mas.Length) 'Определили случ элемент массива с номером y
x2 = x
y2 = y
element1 = mas(x) 'Запомнили значение случайного X-элем массива
element2 = mas(y) 'Запомнили значение случайного Y-элем массива
mas(y) = element1 'Присвоили случ X элем знач y элем
mas(x) = element2 'Присвоили случ Y элем значение x элемента
element12 = mas2(x2) 'Запомнили значение случ X-элеммассива
element22 = mas2(y2) 'Запомнили значение случ Y-элем массива
mas2(y2) = element12 'Присвоили случ X элем значение Y элемента
mas2(x2) = element22 'Присвоили случ Y элем значение X элемента
Next
End Sub
* знач случ = значение случайного
В данном случае случайные элементы динаковы для обоих массивов.
Если элемент первого массива поменял свое место с 1 на 3, то элемент второго массива сделал также.
Процедура имеет зависимость от 2 массивов, которые надо перемешать.
Где это может пригодится?
Я расскажу о том, где я использовал эту процедуру:
- Словарь. В первый массив помещаем слова на РУССКОМ языке, а во второй - иностранные слова. В результате перемешивания - оригинал и перевод имеют одинаковый индекс.
- Сравнение картинок. В игре меморина необходимо было сравнить картинки, но не ссылки ни сами картинки, простым способом не сравнить. По этому я дал каждой паре картинок свой уникальный номер, который и поместил во второй массив. В первом массиве были ссылки на картинки. После перемешивания я сравнивал уникальные идентификаторы, не трогая сами картинки.
В начало
Перемешивание массива
Тренировка мозга 1
|