es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo aleatorizar/barajar dos arrays de la misma manera en C#

Tengo dos matrices, una es una matriz de PictureBox y la otra es una matriz de enteros, ambas tienen el mismo número de elementos. Quiero que ambas matrices se barajen aleatoriamente cada vez, pero que se barajen de la misma manera.

Aquí hay un código que funciona si uso dos matrices de PictureBox o dos matrices de enteros, sin embargo quiero que se baraje una matriz de PictureBox y una matriz de enteros.

Este es el código que quiero que funcione: (dos matrices diferentes)

PictureBox[] cards = new PictureBox[13];
// PictureBox[] numValue = new PictureBox[13];
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 };

Random rnd = new Random();

for (int i = 0; i < cards.Length – 1; i++)
{
int j = rnd.Next(i, cards.Length);

PictureBox temp = cards[j];
cards[j] = cards[i];
cards[i] = temp;

temp = numbers[j]; //Aquí ocurre un error porque numbers no es una variable de PictureBox
numbers[j] = numbers[i];
numbers[i] = temp; 

}

Este es el código que funciona: (para matrices iguales)

PictureBox[] numValue = new PictureBox[13];
PictureBox[] cards = new PictureBox[13];
// int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 };

Random rnd = new Random();

for (int i = 0; i < cards.Length – 1; i++)
{
int j = rnd.Next(i, cards.Length);

PictureBox temp = cards[j];
cards[j] = cards[i];
cards[i] = temp;

temp = numValue [j]; 
numValue [j] = numValue [i];
numValue [i] = temp; 

}

Si conoces otro código diferente que pueda ayudarme, ¡no dudes en compartirlo!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mezclar dos diferentes arreglos, puede modificar el segundo código declarando un tercer arreglo de tipo “Tuple” para contener los pares de PictureBoxes e enteros, mezclando los tuplas utilizando el algoritmo de mezclado Fischer-Yates y luego copiando los pares mezclados de vuelta en sus respectivos arreglos.

    Aquí hay un ejemplo de código:

    PictureBox[] cards = new PictureBox[13];
    int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 };
    
    // Cree un arreglo de tuplas, donde cada tupla contiene un PictureBox y un entero.
    Tuple<picturebox, int="">[] pairs = new Tuple<picturebox, int="">[cards.Length];
    for (int i = 0; i < cards.Length; i++)
    {
        pairs[i] = new Tuple<picturebox, int="">(cards[i], numbers[i]);
    }
    
    Random rnd = new Random();
    
    // Mezcle las tuplas.
    for (int i = pairs.Length - 1; i > 0; i--)
    {
        int j = rnd.Next(0, i + 1);
        Tuple<picturebox, int=""> temp = pairs[j];
        pairs[j] = pairs[i];
        pairs[i] = temp;
    }
    
    // Copie los pares mezclados de vuelta en sus arreglos respectivos.
    for (int i = 0; i < pairs.Length; i++)
    {
        cards[i] = pairs[i].Item1;
        numbers[i] = pairs[i].Item2;
    }
    

    Tenga en cuenta que este código asume que ambos arreglos tienen la misma longitud y que los enteros en el arreglo “numbers” corresponden a los PictureBoxes en el arreglo “cards” en el mismo índice.</picturebox,></picturebox,></picturebox,></picturebox,>

Comments are closed.