2017-12-02 3 views
2

Ich muss Paare von übereinstimmenden Elementen in einer Liste finden, nachdem die Liste nach zwei gruppiert wurde.teilen Sie eine Sammlung in Paare von zwei

I.e. 1 1 2 3 2 2 würde 1 1 2 2 zurückgeben, aber 1 2 2 1 würde nichts zurückgeben, da die zwei in verschiedenen Boxen wären.

Meine Idee war es, Boxen zu erstellen, dann eine Maske anwenden, um die passenden Paare zu bekommen, aber ich kann den paarweisen Boxschritt nicht herausfinden. Wie würde ich paarweise Boxen?

Antwort

1

Dies sollte funktionieren (Eine andere Lösung für mein Problem wäre auch, aber ich bin interessiert an der paarweise Box-Lösung interessant sein).

_2 ]\ 1 2 2 1 
1 2 
2 1 

Es basiert auf der Dyade Infix genannt. Mehr dazu unter diesem Link: http://www.jsoftware.com/help/dictionary/d430.htm

Feld an gelten nur das Adverb \ an die Box Verb <

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

Oder benutzen Sie einfach '_2 <\ 1 2 4 5 4 6 2 1 ' – Tikkanz

+2

Sollte das wirklich gesehen haben, sollte nicht ich Dank für Tikkanz aufzuräumen. – bob

+0

Und tatsächlich, seit Dane meine Antwort aufgeräumt hat, war es ursprünglich "_2 <@] \ 1 2 4 5 4 6 2 1", worauf Tikkanz hinwies. – bob

1

Aufbauend auf Bobs Antwort, können Sie die bedingte Verb auf Wertepaare gelten auch mit die Infix (\) adverb:

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

Eine einfache Möglichkeit, dies bedingt anwenden und mit den boxed Ergebnissen am Ende folgt, unter der Annahme, dass Sie die Ergebnisse geboxt müssen (die Sie in t nicht sein einfaches Beispiel):

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

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

Im Fall ist es unklar, die oben mit dem eingeklammerten (_2 =/\ ]) die bedingten berechnet. Die Fork-Regel wendet _2 <\ ] an, um die Paare zu boxen, und wählt dann die Boxen aus, die dem bedingten Ergebnis mit der Verzweigung entsprechen.

2

Im Allgemeinen ist es besser, Felder in Situationen zu verwenden, in denen Sie mit Listen variabler Größe arbeiten. Wo dies nicht der Fall ist, sollten sie besser vermieden werden, um die Leistung zu verbessern (Geschwindigkeit erhöhen und Platz verringern). Diese Version ist nicht Boxen verwenden:

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