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