【问题标题】:split a collection into pairs of two将集合分成两对
【发布时间】:2017-12-18 13:17:11
【问题描述】:

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

1 1 2 3 2 2 将返回 1 1 2 2,但 1 2 2 1 将不返回任何内容,因为两者将在不同的框中。

我的想法是创建框,然后应用掩码来获得匹配的对,但我无法弄清楚成对的装箱步骤。我将如何进行成对拳击?

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

【问题讨论】:

    标签: j


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      基于 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 &lt;\ ] 对对进行装箱,然后选择与f # g fork 匹配的条件结果的框。

      【讨论】:

        【解决方案3】:

        这应该可行。

           _2 ]\ 1 2 2 1
        1 2
        2 1
        

        它基于称为 Infix 的 dyad u\。更多信息请访问此链接:http://www.jsoftware.com/help/dictionary/d430.htm

        要框,只需将副词\ 应用于框动词&lt;

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

        【讨论】:

        • 或者直接使用_2 &lt;\ 1 2 4 5 4 6 2 1
        • 应该真的看到了,我不应该。谢谢你清理 Tikkanz。
        • 实际上,自从 Dane 清理了我的答案后,最初它是 _2&lt;@]\ 1 2 4 5 4 6 2 1,这是 Tikkanz 所指出的。
        猜你喜欢
        • 2013-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-07
        • 1970-01-01
        • 2015-12-23
        • 1970-01-01
        • 2023-03-07
        相关资源
        最近更新 更多