2000 * 2000
只是4000000
。所以......只需存储一个整数列表并使用模数学在您的应用程序代码中转换为二维坐标。
因此,对于(row, col)
(改变 y 以使其更清晰,并省略y==2000
因为那是,你知道,不是<2000
)的坐标
(850, 1999)
(950, 1289)
(1050, 380)
你会做(python示例)
>>> COLS = 2000
>>> xy2num = lambda x, y: (x*COLS)+y
>>> num2xy = lambda n: (n // COLS, n % COLS)
>>> points = [(850, 1999), (950, 1289), (1050, 380)]
>>> point_nums = [xy2num(x, y) for x, y in points]
>>> point_nums
[1701999, 1901289, 2100380]
>>> [num2xy(num) for num in point_nums]
[(850, 1999), (950, 1289), (1050, 380)]
考虑这一点的一种方法是枚举地图上的每个点:
[(0,0), (0,1), (0,2), <...>, (0,1999),
(1,0), (1,1), (1,2), <...>,
(1999,0), (1999,1), <...>, (1999, 1999)]
每个0<=N<4000000
整数本质上都是对该列表的索引查找。
请注意,这是 2D 并没有什么特别之处 - 可以适用于任意数量的维度(当然,所涉及的数字开始变得非常大)。
更有趣的阅读:
http://en.wikipedia.org/wiki/Aleph_number