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.
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#:
Este método itera a través de cada valor en
array2
, comparándolo con el valor correspondiente enarray1
. Si los valores son iguales, establece el valor correspondiente enarray3
a 0, indicando que es lo mismo que enarray1
. Si los valores son diferentes, establece el valor correspondiente enarray3
a 1, indicando que es diferente dearray1
.Nota que esta implementación asume que
array2
siempre es más grande quearray1
y que los valores enarray1
aparecen en el mismo orden que enarray2
. Si estas suposiciones no son ciertas, puede ser necesario agregar lógica adicional para producir los resultados correctos.