假设我有一个List<Point>
存储 X 和 Y 点的列表,但我希望这些是有序的。假设我事先不知道 X 和 Y 值的域,所以我将使用long
对我的目的来说足够大的值。
在任何给定时刻,列表可能有非常多或非常少的点,这些点可能分布非常稀疏,但我需要能够非常有效地检索和插入列表中存在的特定点。
在过去,我已经使用IComparable<>
并List.BinarySearch()
取得了巨大的成功。不幸的是,我需要能够基于X 和 Y 值进行插入和检索。
如果我事先知道 X 和 Y 的域,并且域足够小,那么我可以将这些数字与一个数字相加到另一个域的下一个幂。这确保没有冲突,我可以有效地检索/插入值。例如,如果 X 和 Y 都在 0 和 9 之间,那么我可以在10 * X + Y
. 因为我所有的数据类型都是 64 位整数,所以我真的不能这样做。
在不限制域的情况下,有没有其他方法可以实现此功能?
一种绝对可行的方法是在 X.ToString("N19") + Y.ToString("N19") 上进行比较,但是现在这是字符串比较而不是数值比较,这会带来巨大的性能损失。
编辑:我需要“N19”,否则 (X = 1234, Y = 5) 将解析为与 (X = 1, Y = 2345); 以及介于两者之间的所有其他碰撞。