两个二维数组的匹配方法2
另一种数组排序的方法更为简单,我们可以直接使用IComparer接口来达到目的。当然,这样做的前提是,我们将二维数组转换为存储我们自定义结构的一维数组,而排序直接使用Array.Sort方法实现。
public class Pt
{
int x;
public int X
{
get { return x; }
set { x = value; }
}
int y;
public int Y
{
get { return y; }
set { y = value; }
}
int z;
public int Z
{
get { return z; }
set { z = value; }
}
public Pt(int x, int y)
{
this.x = x;
this.y = y;
}
public Pt(int x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
}
类型Pt用于存储二维数组的一行记录。
比较器类的写法(请注意,我们使用了范型,避免了装箱拆箱操作):
public class SortPtComparer2 : IComparer<Pt>
{
#region IComparer 成员
public int Compare(Pt x, Pt y)
{
if (x.X == y.X)
{
return x.Y - y.Y;
}
return x.X -y.X;
}
#endregion
}
比较运算:
Pt[] p = new Pt[8];
Pt p1 = new Pt(2, 1);
p[0] = p1;
p1 = new Pt(2, 2);
p[1] = p1;
p1 = new Pt(3, 1);
p[2] = p1;
p1 = new Pt(8, 4);
p[3] = p1;
p1 = new Pt(3, 9);
p[4] = p1;
p1 = new Pt(6, 4);
p[5] = p1;
p1 = new Pt(3, 8);
p[6] = p1;
p1 = new Pt(7, 2);
p[7] = p1;
SortPtComparer2 st2 = new SortPtComparer2();
Array.Sort(p, st2);
如果我们需要对三个字段进行排序,排序器如何写呢?
public class SortPtComparer : IComparer<Pt>
{
#region IComparer 成员
public int Compare(Pt x, Pt y)
{
if (x.X == y.X)
{
if (x.Y == y.Y)
{
return x.Z - y.Z;
}
return x.Y - y.Y;
}
return x.X - y.X ;
}
#endregion
}
Related Items
Comments
Leave a comment
Or, take a look at Archives and Categories