如何在Smalltalk中管理二维数组?

时间:2010-06-22 18:17:58

标签: smalltalk multidimensional-array visualworks

我有一个点列表,必须进行侵蚀/扩张操作。我需要一种二维数组,但在VisualWorks中找不到怎么做(我知道Squeak中有一个Array2d类,但我必须使用VW)。

5 个答案:

答案 0 :(得分:4)

许多Smalltalk实现都会有某种Matrix类,有时会进行优化,会有#rowAt:columnAt :(或简称为#at:at :)的方法。

在GNU Smalltalk中,这是在DhbNumericalMethods包中。现在它还没有优化。

答案 1 :(得分:3)

简单地使用通用方法:数组数组:

(Array new: xSize)
    at: 1 put: ((Array new: ySize) at: 1 put: aValue; at: 2 put: aValue; ...);
    at: 2 put: ((Array new: ySize) at: 1 put: aValue; at: 2 put: aValue; ...);
    ...

答案 2 :(得分:2)

如果您希望操作高效,请研究VisualWorks Image类,协议“图像处理”和“位处理”。根据那里的原语建立自己的侵蚀/扩张操作。

答案 3 :(得分:2)

这是在Squeak中处理二维数组的另一种方法(我使用的是4.2版本)。

test := Matrix new: 3.     "this defines a 3 x 3 array"
test at: 1 at: 1 put: 5.
test at: 1 at: 2 put: 6.
test at: 1 at: 3 put: 7.
等等,AFAIK你只能用这种方式做2D阵列,它们必须是方阵。这适用于我和我儿子正在制作数独游戏的项目,ymmv。干杯!

答案 4 :(得分:0)

{ 1, 4, 3, 7, 5, 8} parititionIndex = 1