0

我正在尝试创建一个二维数组,当我访问索引时,将返回该值。但是,如果访问未定义的索引,它会调用回调并用该值填充索引,然后返回该值。

该数组也将具有负索引,但我可以通过使用 4 个数组(每个象限 0,0 左右一个)来克服这个问题。

4

2 回答 2

0

这个问题对于stackoverflow来说可能太宽泛了。- 没有通用的“一刀切”解决方案,结果很大程度上取决于所使用的语言(和标准库)。

这个问题有几个问题。首先让我们考虑一个二维数组,我们说这已经是语言的一部分,并且这样的数组在访问时动态增长。如果不是这种情况,那么问题就变得真正依赖于语言。

现在通常在分配内存时,语言会自动初始化点(同样,语言取决于这是如何发生的以及最好的方法是什么,请查看 RAII)。尽管我可以预见特定单元格的实际计算可能会很昂贵(与分配相比)。在那种情况下,一个有趣的事情可能就是所谓的“两阶段建设”。数组必须填充元组/对象。对象的默认构造将位/布尔值设置为 false - 表示该值尚未准备好。然后在访问(即get()方法或operator()依赖于语言)上,如果该位为假,则它构造,否则它只是读取。


另一种方法是使用字典/键值映射。其中键是坐标,值是值。这样做的好处是,访问时构造的问题是继承到数据结构的(尽管再次依赖于语言)。然而,使用映射的缺点是值的查找速度从 O(1) 变为 O(logn)。(但实际时间因语言而异)。


最后我希望你明白如何做到这一点取决于更具体的要求、你使用的语言和其他库。最后,每种语言中只有一个数据结构:一长串未分配的值。任何比这更高级的东西都取决于语言。

于 2013-08-23T14:45:56.147 回答
0

您可以创建一个依赖元组和字典的 Matrix 类,具有以下行为:

from collections import namedtuple
2DMatrixEntry = namedtuple("2DMatrixEntry", "x", "y", "value")
matrix = new dict()
defaultValue = 0

# add entry at 0;1
matrix[2DMatrixEntry(0,1)] = 10.0

# get value at 0;1
key = 2DMatrixEntry(0,1)
value = {defaultValue,matrix[key]}[key in matrix]

干杯

于 2013-08-20T19:41:46.353 回答