none
Coincidencia en filas de arrays RRS feed

  • Pregunta

  • Hola.

    Tengo dos arrrays de strings bidimensionales y quiero comparar los elementos de cada fila del primero con cada fila del segundo.


    for (int i = 0; i < array1.GetLength(0); i++) // recorre todas las filas del array
                {
                    for (int j = 0; j < array2.GetLength(0); j++) // recorre todas las filas del array2
                    {
                        int coincidencias = array1.Intersect(array2).Count(); //compara
                    }              
                }

    int coincidencias se mantiene siempre a 0. No sé porqué.

    He probado a pasarlos a int y el intersect me aparece en rojo.

    Gracias por las respuestas.

    domingo, 2 de junio de 2019 18:21

Respuestas

  • hola

    Entonces podes declarar un vector o matriz para guardar allí el total de coincidencias

    int[][] totales;

    totales[0][0] 

    tendrá el total de coincidencias de la fila 1 de array1 con la fila 1 de array2

    totales[0][1] 

    tendrá el total de coincidencias de la fila 1 de array1 con la fila 2 de array2

    totales[1][0]

    tendrá el total de coincidencias de la fila 2 de array1 con la fila 1 de array2

    totales[1][1]

    tendrá el total de coincidencias de la fila 2 de array1 con la fila 2 de array2

    string[][] array1 = new string[][] { 
        new string[] { "azul", "rojo", "amarillo" }, new string[] { "fucsia", "marron", "verde" } };
    string[][] array2 = new string[][] { 
        new string[] { "lila", "naranja", "rojo" }, new string[] { "fucsia", "amarillo", "blanco" } };
    
    int a, b;
    int[][] totales = new int[array1.GetLength(0)][];
    for (a = 0; a < totales.GetLength(0); a++) 
        totales[a] = new int[array2.GetLength(0)];
    
    for (a = 0; a < array1.GetLength(0); a++)
        for (b = 0; b < array2.GetLength(0); b++)
            totales[a][b] = array1[a].Intersect(array2[b]).Count();
    
    Saludos


    lunes, 3 de junio de 2019 21:54

Todas las respuestas

  • hola Georgina

    Con

    int coincidencias = array1.Intersect(array2).Count();

    siempre te quedaría el resultado del último llamado al método, o sea, no vas sumando ...

    Además array1 referencia a todo el array bidimensional, no a una de sus filas, de hecho en el cuerpo de los 2 ciclos anidados no usaste los índices i y j. 

    Mira a ver si te sirve este ejemplo

    string[][] array1 = new string[][] {

    new string[] { "azul", "rojo", "amarillo" }, new string[] { "fucsia", "marron", "verde" } }; string[][] array2 = new string[][] {

    new string[] { "lila", "naranja", "rojo" }, new string[] { "fucsia", "amarillo", "blanco" } }; int count = 0; int a, b; for (a = 0; a < array1.GetLength(0); a++) for (b = 0; b < array2.GetLength(0); b++) count += array1[a].Intersect(array2[b]).Count();

    Este código te suma los strings iguales de cada una de las filas de array1 con cada una de las de array2 (debería dar 3)

    Saludos

    Pablo


    lunes, 3 de junio de 2019 0:32
  • Gracias por responder, Pablo.

    Tu ejemplo ya se va acercando más a lo que quiero, pero no responde exactamente con lo que quiero.

    El resultado, para tu ejemplo deberia ser:

    fila1 de array 1 con fila 1 de array 2= 1 (que es el rojo)

    fila1 de array 1 con fila 2 de array 2= 0 (no coincide ningun color)

    fila2 de array 1 con fila 1 de array 2= 1 ( color amarillo)

    fila2 de array 1 con fila 2 de array 2= 1( color fuscia)

    una ayudita, gracias. Saludos

    lunes, 3 de junio de 2019 18:19
  • hola

    Entonces podes declarar un vector o matriz para guardar allí el total de coincidencias

    int[][] totales;

    totales[0][0] 

    tendrá el total de coincidencias de la fila 1 de array1 con la fila 1 de array2

    totales[0][1] 

    tendrá el total de coincidencias de la fila 1 de array1 con la fila 2 de array2

    totales[1][0]

    tendrá el total de coincidencias de la fila 2 de array1 con la fila 1 de array2

    totales[1][1]

    tendrá el total de coincidencias de la fila 2 de array1 con la fila 2 de array2

    string[][] array1 = new string[][] { 
        new string[] { "azul", "rojo", "amarillo" }, new string[] { "fucsia", "marron", "verde" } };
    string[][] array2 = new string[][] { 
        new string[] { "lila", "naranja", "rojo" }, new string[] { "fucsia", "amarillo", "blanco" } };
    
    int a, b;
    int[][] totales = new int[array1.GetLength(0)][];
    for (a = 0; a < totales.GetLength(0); a++) 
        totales[a] = new int[array2.GetLength(0)];
    
    for (a = 0; a < array1.GetLength(0); a++)
        for (b = 0; b < array2.GetLength(0); b++)
            totales[a][b] = array1[a].Intersect(array2[b]).Count();
    
    Saludos


    lunes, 3 de junio de 2019 21:54
  • Gracias Pablo.

    Es justo lo que necesitaba.

    Un saludo.

    jueves, 6 de junio de 2019 22:20