J 动词或短语,用于将相同元素的运行组合在一起



这最好通过示例来证明:

输入:

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 会将所有1 组合在一起,将所有2 组合在一起,依此类推。 我只想将连续的运行分组在一起。

最后一个想法:如果我能首先为它生成如下所示的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 的隐性解决方案(我的想法涉及一个突变的临时变量来存储当前的"标签",即上面定义的x中的数字 0 到 4(

在这种情况下,键/.的替代方案是二元切割;.

x构建为:

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

那些标志着组的结束。然后使用二元<;.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│
└─┴───┴─────┴─┴───┘

最新更新