两个二维数组的匹配方法2

Posted by 蒋波涛 2 January,2008 Views (0)Comment

另一种数组排序的方法更为简单,我们可以直接使用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

Categories : .NET开发 Tags : NET  
Comments
Leave a comment

Or, take a look at Archives and Categories

目录

存档