разбить коллекцию на пары по два

Мне нужно найти пары совпадающих элементов в списке после того, как список был сгруппирован по два.

Т.е. 1 1 2 3 2 2 вернет 1 1 2 2, но 1 2 2 1 ничего не вернет, потому что двойки будут в разных ячейках.

Моя идея состояла в том, чтобы создать блоки, а затем применить маску, чтобы получить совпадающие пары, но я не могу понять шаг попарного бокса. Как мне заняться парным боксом?

(Было бы интересно другое решение моей проблемы, но меня интересует решение для попарного бокса)


j
person Darth Egregious    schedule 02.12.2017    source источник


Ответы (3)


Как правило, поля лучше использовать в ситуациях, когда вы имеете дело со списками переменного размера. Если это не так, лучше избегать их, чтобы повысить производительность (увеличить скорость и уменьшить пространство). В этой версии не используются ящики:

   _2 ,@(]\ #~ =/\) 1 1 3 4 2 2
1 1 2 2
   _2 ,@(]\ #~ =/\) 1 2 2 1
person Tikkanz    schedule 18.12.2017

Основываясь на ответе Боба, вы также можете применить условный глагол к парам значений с помощью Infix (\) наречие:

   _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 вилкой.

person Dane    schedule 18.12.2017

Это должно сработать.

   _2 ]\ 1 2 2 1
1 2
2 1

Он основан на диаде u \, называемой 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|
+---+---+---+---+
person bob    schedule 02.12.2017
comment
Или просто используйте _2 <\ 1 2 4 5 4 6 2 1 - person Tikkanz; 03.12.2017
comment
Должен был увидеть это на самом деле, не должен ли я. Спасибо за уборку в Тикканце. - person bob; 03.12.2017
comment
И на самом деле, поскольку Дейн с тех пор очистил мой ответ, первоначально это было _2<@]\ 1 2 4 5 4 6 2 1, на что указывал Тикканц. - person bob; 18.12.2017