我有两个字节数组,它们可能非常大,甚至可能有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库,而不是自己编写,但如果你想走这条路,维基百科的文章应该是一个很好的起点,可以了解更多关于这个特定兔子洞的信息。