【发布时间】:2017-12-18 13:17:11
【问题描述】:
我需要在列表按两个分组后在列表中找到成对的匹配元素。
即1 1 2 3 2 2 将返回 1 1 2 2,但 1 2 2 1 将不返回任何内容,因为两者将在不同的框中。
我的想法是创建框,然后应用掩码来获得匹配的对,但我无法弄清楚成对的装箱步骤。我将如何进行成对拳击?
(我的问题的另一个解决方案也很有趣,但我对成对拳击解决方案感兴趣)
【问题讨论】:
标签: j
我需要在列表按两个分组后在列表中找到成对的匹配元素。
即1 1 2 3 2 2 将返回 1 1 2 2,但 1 2 2 1 将不返回任何内容,因为两者将在不同的框中。
我的想法是创建框,然后应用掩码来获得匹配的对,但我无法弄清楚成对的装箱步骤。我将如何进行成对拳击?
(我的问题的另一个解决方案也很有趣,但我对成对拳击解决方案感兴趣)
【问题讨论】:
标签: j
在处理可变大小列表的情况下,通常最好使用框。如果不是这种情况,最好避免使用它们以提高性能(提高速度并减少空间)。此版本不使用盒子:
_2 ,@(]\ #~ =/\) 1 1 3 4 2 2
1 1 2 2
_2 ,@(]\ #~ =/\) 1 2 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 fork 匹配的条件结果的框。
【讨论】:
这应该可行。
_2 ]\ 1 2 2 1
1 2
2 1
它基于称为 Infix 的 dyad u\。更多信息请访问此链接: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 2 4 5 4 6 2 1
_2<@]\ 1 2 4 5 4 6 2 1,这是 Tikkanz 所指出的。