2017-12-02 15 views
2

リストが2つずつグループ化された後、リスト内の一致する要素のペアを見つける必要があります。コレクションを2つのペアに分割する

I.e. 1 1 2 3 2 21 1 2 2を返しますが、1 2 2 1は2つのボックスが異なるボックスにあるため何も返しません。

私の考えは、ボックスを作成し、マッチングペアを取得するためのマスクを適用することでしたが、私はペアワイズボクシングステップを理解できません。ペアワイズボクシングはどうすればいいですか?

(私の問題に対する別の解決策は、同様に興味深いものになるだろうが、私はペアごとのボクシングのソリューションに興味がある)

答えて

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| 
+---+---+---+---+ 
+3

それとも\ 1 2 4 5 6 4 2 1 ' – Tikkanz

+2

は本当に、TikkanzをクリーンアップするためI.おかげべきではないと見ているべき '_2 <使用します。 – bob

+0

実際、Daneは私の答えをきれいにしていたので、もともとそれはTikkanzが指摘していた '_2 <@] \ 1 2 4 5 4 6 2 1'でした。 – bob

1

ビルボブの答えに、あなたにもと値のペアを条件動詞を適用することができます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 =/\ ])と条件を計算します。フォークルールは_2 <\ ]を適用してペアをボックス化し、条件付き結果と一致するボックスをf # gフォークで選択します。

2

一般的に、可変サイズのリストを扱う状況では、ボックスを使用する方が良いです。そうでない場合は、パフォーマンスの向上(速度の向上とスペースの削減)を避けることが最善です。このバージョンでは、ボックスを使用していません:

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