J 动词或短语将相同元素组合在一起

J verb or phrase to group together runs of identical elements

这可以通过示例得到最好的证明:

输入:

1 2 2 1 1 1 2 3 3

输出:

    1; 2 2; 1 1 1; 2; 3 3

┌─┬───┬─────┬─┬───┐
│1│2 2 │1 1 1│2│3 3│
└─┴───┴─────┴─┴───┘

所以我正在寻找类似 Key /. 的东西,但 Key 会将 all 组合在一起,all twos在一起,等等。我只想将连续的运行组合在一起。

最后一个想法:Key可以成功使用,如果我能先为它生成一个x,看起来像这样:

0 1 1 2 2 2 3 4 4   NB. x suitable for use in Key
1 2 2 1 1 1 2 3 3   NB. original data

我想不出生成这样一个 x 的默认解决方案(我的想法涉及一个变异的临时变量来存储当前 "label",即 [=14= 中的数字 0 到 4 ] 以上定义)

在这种情况下,Key /. 的替代方法是二元 Cut ;. :

构建 x 为:

   (1 ,~ 2 ~:/\ ]) 1 2 2 1 1 1 2 3 3
1 0 1 0 0 1 1 0 1

这些标志着小组的结束。然后使用 dyadic <;.2 将这些组框起来:

   ((1 ,~ 2 ~:/\ ]) <;.2 ]) 1 2 2 1 1 1 2 3 3
┌─┬───┬─────┬─┬───┐
│1│2 2│1 1 1│2│3 3│
└─┴───┴─────┴─┴───┘

这可以缩写为:

   (<;.2~ 1 ,~ 2&(~:/\)) 1 2 2 1 1 1 2 3 3
┌─┬───┬─────┬─┬───┐
│1│2 2│1 1 1│2│3 3│
└─┴───┴─────┴─┴───┘