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.

Encontrar la diferencia entre 2 arrays grandes.

Tengo dos arreglos de bytes que pueden ser muy grandes, incluso de hasta 700500 valores.

El arreglo array2 siempre es más grande que array1, y básicamente contiene los mismos datos que array1, pero con adiciones aleatorias, por ejemplo:

int[] array1 = {1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 0, 0, 0};

int[] array2 = {1, 1, 1, 2, 7, 7, 2, 2, 2, 2, 1, 2, 3, 2, 2, 3, 3, 4, 7, 2, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 8, 4, 1, 1, 7, 7, 8, 8, 9, 9, 0, 0};

Necesito tener un array3, que debe tener el mismo tamaño que array2. Mostrará los índices exactos donde se encuentran las adiciones, por lo que para este ejemplo sería:

int[] array3 = {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0};

(0 = igual que en array1, 1 = diferente de array1)

Quiero obtener el mismo resultado que obtengo en la aplicación “Beyond Compare”:

https://i.ibb.co/yX6YCsp/Diff.jpg

Pero para obtener los índices de las marcas rojas que se ven en la imagen, en el panel derecho.

Necesito escribirlo en C#.

Muchas gracias por cualquier ayuda en esto.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para comparar dos matrices de bytes y crear una tercera matriz que contenga solo los índices donde la segunda matriz difiere de la primera, se puede usar el siguiente código en C#:

    public static int[] GetDiffIndexes(byte[] array1, byte[] array2)
    {
        int[] array3 = new int[array2.Length];
        int j = 0;
        for (int i = 0; i < array2.Length; i++)
        {
            if (j < array1.Length && array1[j] == array2[i])
            {
                array3[i] = 0; // Igual que en array1
                j++;
            }
            else
            {
                array3[i] = 1; // Diferente de array1
            }
        }
        return array3;
    }
    

    Este método itera a través de cada valor en array2, comparándolo con el valor correspondiente en array1. Si los valores son iguales, establece el valor correspondiente en array3 a 0, indicando que es lo mismo que en array1. Si los valores son diferentes, establece el valor correspondiente en array3 a 1, indicando que es diferente de array1.

    Nota que esta implementación asume que array2 siempre es más grande que array1 y que los valores en array1 aparecen en el mismo orden que en array2. Si estas suposiciones no son ciertas, puede ser necesario agregar lógica adicional para producir los resultados correctos.

Comments are closed.