在一系列值发生变化的地方拆分Smalltalk阵列的惯用方法是什么?

时间:2015-01-10 20:21:35

标签: arrays smalltalk pharo idiomatic

给定一组域对象(具有subject,trial和run属性),如下所示:

+---------+-------+-----+
| Subject | Trial | Run |
+---------+-------+-----+
|       1 |     1 |   1 |
|       1 |     2 |   1 |
|       1 |     3 |   2 |
|       1 |     4 |   2 |
|       2 |     1 |   1 |
|       2 |     2 |   1 |
|       1 |     1 |   1 |
|       1 |     2 |   1 |
+---------+-------+-----+

我希望在主题值变化的每一点将其拆分为多个数组 上面的例子应该产生三个数组:

+---------+-------+-----+
| Subject | Trial | Run |
+---------+-------+-----+
|       1 |     1 |   1 |
|       1 |     2 |   1 |
|       1 |     3 |   2 |
|       1 |     4 |   2 |
+---------+-------+-----+

+---------+-------+-----+
|       2 |     1 |   1 |
|       2 |     2 |   1 |
+---------+-------+-----+

+---------+-------+-----+
|       1 |     1 |   1 |
|       1 |     2 |   1 |
+---------+-------+-----+

像这样分割数组的惯用Smalltalk(Pharo)方法是什么?

1 个答案:

答案 0 :(得分:4)

带有二进制块的

SequenceableCollection >> piecesCutWhere:是你的朋友:

{ 1. 1. 2. 2. 2. 3. 1. 2. } piecesCutWhere: [:left :right | left ~= right]
=> an OrderedCollection #(1 1) #(2 2 2) #(3) #(1) #(2)