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

What's the idiomatic way to split a Smalltalk array at the spot where a series of values changes?

给定一个域对象数组(具有属性 subject、trial 和 运行),如下所示:

+---------+-------+-----+
| 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) 方法是什么?

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)