我需要一个动态的2d容器,我很惊讶我在集合中找不到任何有用的东西。所以我用oldskool的方式制作了自己的东西,但不知怎的,我觉得必须有一些东西我不见了。 smalltalk pharo中的整个概念基于使用他们的东西,而不是必须建立自己的东西。
答案 0 :(得分:3)
好的,所以你想拥有按行和列排列的对象集合(在你的情况下是变形)。这是一种方法
初始化:在类中创建一个实例变量来保存对象,并将其初始化为:
morphs := OrderedCollection new
添加:通过类似这样的方法将新对象放入您的收藏中
placeMorph: morph atRow: i column: j
| row |
row := morphs at: i ifAbsentPut: [OrderedCollection new].
j - row size timesRepeat: [row add: nil].
row at: j put: morph
请注意,通过nil
完全j - row size
次添加<= 0
次(可能是i
),可确保在j
行nil
处存在一个广告位。
检索:获取网格中指定位置的对象或morphAtRow: i column: j
| row |
row := morphs at: i ifAbsent: [^nil].
^row at: j ifAbsent: [nil]
Dictionary
另一种可能性是使用morphs := Dictionary new
,如果网格很大且稀疏,这可能是有意义的。在这种情况下,您可以执行以下操作
<强>初始化强>
placeMorph: morph atRow: i column: j
morphs at: i -> j put: morph
<强>加成强>
morphAtRow: i column: j
^morphs at: i -> j ifAbsent: [nil]
<强>检索强>
i -> j
请注意,我已将关联{i.j}
用于关键字。另一种可能性是使用对$('.burger').on('click', function(e){
e.stopPropagation();
$('#menu').toggleClass('hide');
});
$(document.body).on('click', ':not(.burger)', function(e){
$('#menu').addClass('hide');
});
。
答案 1 :(得分:1)
Pharo有Matrix
级。这几乎是一个2d容器,除非你在谈论我不理解的其他东西:)