这最好通过示例来证明:
输入:
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│
└─┴───┴─────┴─┴───┘