查找两个大数组之间的差异



我有两个字节数组,它们可能非常大,甚至可能有700500个值。

array2总是大于array1,并且它基本上包含与array1中相同的数据,但带有随机添加,例如:

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};

我需要一个array3,它需要与arrays2具有相同的大小。它将显示添加的确切索引,因此对于这个示例,它将是:

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=与阵列1中相同,1=与阵列1不同(

我希望得到与我在应用程序中得到的结果相同的结果";Beyond Compare":

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

但是要获取您在图片右侧窗格中看到的红色标记的索引。

我需要用C#来写。

非常感谢你在这方面的帮助。

您可以比较两个数组之间的每个元素。如果匹配,则将0添加到array3,并查看两个数组中的下一个元素。如果不匹配,请在array3中添加一个1,然后查看array2中的下一个元素。如果array1没有更多元素,则继续添加1,直到array2没有更多元素。

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};
int index1 = 0;
int index2 = 0;
int[] array3 = new int[array2.Length];
while (index2 < array2.Length)
{
if (index1 >= array1.Length)
{
array3[index2] = 1;
index2 += 1;
}
else if (array1[index1] == array2[index2])
{
array3[index2] = 0;
index1 += 1;
index2 += 1;
}
else
{
array3[index2] = 1;
index2 += 1;
}
}
foreach (int i in array3)
{
Console.Write(i.ToString() + " ");
}

输出:

0 0 0 0 1 1 0 0 0 0 1 0 0 1 1 0 1 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

您正在寻找的是一个diff算法,它不太容易做好。我建议使用谷歌的DiffMatchPatch库,而不是自己编写,但如果你想走这条路,维基百科的文章应该是一个很好的起点,可以了解更多关于这个特定兔子洞的信息。

相关内容

  • 没有找到相关文章

最新更新