将一个集合分成两对

时间:2017-12-02 14:49:16

标签: j

在列表按两个分组后,我需要在列表中找到匹配元素对。

即。 1 1 2 3 2 2将返回1 1 2 2,但1 2 2 1将不会返回任何内容,因为这两个框将位于不同的框中。

我的想法是创建盒子,然后应用蒙版来获得匹配对,但我无法弄清楚成对拳击步骤。我怎么做成对拳击?

(我的问题的另一个解决方案也很有趣,但我对成对拳击解决方案感兴趣)

3 个答案:

答案 0 :(得分:2)

通常,在处理可变大小列表的情况下,最好使用方框。如果不是这种情况,最好避免它们提高性能(提高速度和减少空间)。此版本不使用框:

   _2 ,@(]\ #~ =/\) 1 1 3 4 2 2
1 1 2 2
   _2 ,@(]\ #~ =/\) 1 2 2 1

答案 1 :(得分:1)

这应该有效。

   _2 ]\ 1 2 2 1
1 2
2 1

它基于称为Infix的二元游戏。有关此链接的更多信息,请访问:http://www.jsoftware.com/help/dictionary/d430.htm

要设置框,只需将副词\应用到动词<

框中
   _2 <\ 1 2 4 5 4 6 2 1
+---+---+---+---+
|1 2|4 5|4 6|2 1|
+---+---+---+---+

答案 2 :(得分:1)

根据Bob的回答,您可以在Infix (\) adverb上对值对应用条件谓词:

   _2 =/\ 1 1 2 3 2 2
1 0 1

应用此条件并以盒装结果结束的简单方法如下,假设您需要将结果装箱(在此简单示例中您不会这样做):

   ((_2 =/\ ]) # _2 <\ ]) 1 2 2 1

   ((_2 =/\ ]) # _2 <\ ]) 1 1 2 3 2 2
┌───┬───┐
│1 1│2 2│
└───┴───┘

如果不清楚,上面用括号(_2 =/\ ])计算条件。 fork规则应用_2 <\ ]来装箱对,然后选择与条件结果匹配的方框和f # g分叉。