两个二维数组的匹配方法
问题:如何对两个二维多列数组进行匹配运算,将两个数组中一致的元素设置标记。
int[,] a = new int[5, 3]; int[,] b = new int[5, 3];
a[0, 0] = 3; b[0, 0] = 1;
a[0, 1] = 8; b[0, 1] = 0;
a[1, 0] = 7; b[1, 0] = 3;
a[1, 1] = 2; b[1, 1] = 8;
a[2, 0] = 6; b[2, 0] = 2;
a[2, 1] = 4; b[2, 1] = 4;
a[3, 0] = 5; b[3, 0] = 5;
a[3, 1] = 9; b[3, 1] = 9;
a[4, 0] = 3; b[4, 0] = 7;
a[4, 1] = 5; b[4, 1] = 7;
将a和b的重复元素第三项设置为1的标记。
解决方法:
1.将两个数组分别进行排序,一个数组的排序也要对其两个项都实施。
对第一个字段进行排序的函数sort
private static void sort(ref int[,] X)
{
int tmpx;
int tmpy;
for (int i = 0; i < X.Length / 3 - 1; i++)
{
for (int j = i + 1; j < X.Length / 3; j++)
{
if (X[i, 0] > X[j, 0])
{
tmpx = X[i, 0];
tmpy = X[i, 1];
X[i, 0] = X[j, 0];
X[i, 1] = X[j, 1];
X[j, 0] = tmpx;
X[j, 1] = tmpy;
}
}
}
}
对第二个字段排序的函数sort2:
private static void sort2(ref int[,] X)
{
int tmpx;
int tmpy;
for (int i = 0; i < X.Length / 3 - 1; i++)
{
for (int j = i + 1; j < X.Length / 3; j++)
{
if (X[i, 0] == X[j, 0] && X[i, 1] > X[j, 1])
{
tmpx = X[i, 0];
tmpy = X[i, 1];
X[i, 0] = X[j, 0];
X[i, 1] = X[j, 1];
X[j, 0] = tmpx;
X[j, 1] = tmpy;
}
}
}
}
经过此排列的a数组为:
a[0, 0] = 3;
a[0, 1] = 5;
a[1, 0] = 3;
a[1, 1] = 8;
a[2, 0] = 5;
a[2, 1] = 9;
a[3, 0] = 6;
a[3, 1] = 4;
a[4, 0] = 7;
a[4, 1] = 2;
b数组为:
b[0, 0] = 1;
b[0, 1] = 0;
b[1, 0] = 2;
b[1, 1] = 4;
b[2, 0] = 3;
b[2, 1] = 8;
b[3, 0] = 5;
b[3, 1] = 9;
b[4, 0] = 7;
b[4, 1] = 7;
我们可以看到,{3,8,0}和{5,9,0}都是重复项。如何最快将其比对呢?其比对函数如下:
private static void Compare2(int[,] X, int[,] Y)
{
int startpos = 0;
for (int i = 0; i < X.Length / 3; i++)
{
for (int j = startpos; j < Y.Length / 3; j++)
{
if (X[i, 0] < Y[j, 0])
{
Console.WriteLine("-");
startpos=j;
break;
}
else if (X[i, 0] == Y[j, 0])
{
if (X[i, 1] == Y[j, 1])
{
X[i, 2] = 1;
Y[j, 2] = 1;
Console.WriteLine("-");
startpos = j + 1;
break;
}
else if (X[i, 1] < Y[j, 1])
{
Console.WriteLine("-");
startpos = j ;
break;
}
}
}
}
}
Related Items
Comments
Leave a comment
Or, take a look at Archives and Categories