C#IC可用于X和Y坐标

时间:2013-05-13 06:37:14

标签: c# comparison

假设我有List<Point>存储X和Y点的列表,但我希望这些点有序。假设我事先并不知道X和Y值的域,所以我将long使用足够大的IComparable<>

在任何给定时刻,列表可能具有非常大或非常少量的点,并且这些点可能非常稀疏地分布,但是我需要能够非常有效地检索和插入特定点(如果它们存在于列表。

过去,我使用List.BinarySearch()10 * X + Y取得了巨大成功。不幸的是,我需要能够根据 X和Y值插入和检索。

如果我事先知道X和Y的域,并且域足够小,那么我可以将这些数字与一个数字一起添加到另一个域的下一个幂。这确保没有冲突,我可以有效地检索/插入值。例如,如果X和Y都在0到9之间,那么我可以在{{1}}上进行比较。因为我的所有数据类型都是64位整数,所以我无法真正做到这一点。

在不限制域名的情况下,还有其他方法可以实现此功能吗?

一种绝对有效的方法是在X.ToString(“N19”)+ Y.ToString(“N19”)上进行比较,但现在这是字符串比较而不是数字比较,这将带来巨大的性能罚。

编辑:我需要“N19”,否则(X = 1234,Y = 5)会解析为(X = 1,Y = 2345);以及其间的所有其他碰撞。

1 个答案:

答案 0 :(得分:1)

不是将矢量的多个分量组合成一个标量值进行比较,而是可以比较每个分量,例如

int CompareTo(Point p)
{
    if (this.X < p.X)
    {
        return -1;
    }
    else if (this.X > p.X)
    {
        return 1;
    }
    else
    {
        return this.Y.CompareTo(p.Y);
    }        
}