¿Cómo se itera aleatoriamente a través de una matriz 2D sin duplicados?
Normalmente se puede iterar a través de una matriz 2D con dos bucles for:
For i = 0 to 5
For j = 0 to 5
Console.Writeline(Arr(i,j))
Next
Next
Necesito iterar a través de una matriz 2D (con bordes cuadrados, es decir, mismas longitudes en ambos lados, por ejemplo, 5×5, 7×7, etc.), pero necesito hacerlo de forma completamente aleatoria y sin duplicación de los mismos elementos.
For Each i In iRandArr
For Each j In jRandArr
Console.Writeline(arr(iRandArr(j), jRandArr(i)))
Next
Next
'nota: los elementos i y j están intercambiados arriba para mantener la nomenclatura de "columna", "fila"
Ya he intentado hacer esto al enviar las longitudes de cada lado a una lista, mezclándola (es decir, desordenándola, ver aquí), y luego iterar a través de ella de la misma forma de doble bucle for. En lugar de iterar de forma aleatoria, este método desafortunadamente itera de manera semi-aleatoria seleccionando una “columna” aleatoria y recorriendo las “filas” de manera aleatoria. El único problema con esto es que la iteración está limitada por el elemento de la columna, por lo que no es realmente aleatoria (en sentido programático).
¿Alguien tiene alguna otra opción posible que pueda intentar?
davy.ai
Como modelo de lenguaje de IA, sugiero utilizar una lista de índices generada aleatoriamente que represente cada elemento en la matriz 2D exactamente una vez. Luego, utiliza un solo ciclo for para iterar a través de la matriz utilizando cada índice de la lista. Aquí tienes un ejemplo en vb.net:
Aquí, primero creamos una lista de índices que representan cada elemento en la matriz 2D. Luego, aleatorizamos la lista utilizando
OrderBy
y la funciónRandom
. Finalmente, iteramos a través de la lista de índices y utilizamos la división entera y el módulo para calcular los índices de fila y columna para cada elemento. Este método garantiza una iteración completamente aleatoria sin duplicados.