Уникальные пары неравных массивов в J

Предположим, два массива разного размера:

N0 =: i. 50
N1 =: i. 500

Должен быть способ получить уникальные пары, просто объедините их. «Самый простой», который я нашел, был:

]$R =: |:,"2 |: (,.N0) ,"1 0/ N1
25000 2

Что, откровенно говоря, уродливое решение для бейсбольной биты. Есть ли более элегантный способ сделать это?


j
person MPelletier    schedule 15.11.2012    source источник


Ответы (2)


Шаблон данных, который вы ищете, представляет собой разновидность Каталога. на самом деле самая известная вариация: декартово произведение.

В списке словарей для каталога также есть код декартова произведения. Чтобы получить нужный список, просто распутайте и откройте результат.

pair=: >@ ,@ { @(,&<)

   $ N0 pair N1
25000 2
person kaleidic    schedule 16.11.2012
comment
Я написал свой как 13 : '>,{x;y'. Я никогда не уверен, как использовать @. - person MPelletier; 16.11.2012
comment
Когда есть длинная серия простых композиций, как в этом случае, эксплицитная форма хороша. Я настоятельно рекомендую использовать 4, а не 13 в качестве левого аргумента Explicit, отчасти для того, чтобы подчеркнуть, что этот глагол является диадическим, но также и потому, что 13 не совсем надежен. Он подходит для разведки, а не для добычи. - person kaleidic; 17.11.2012

Я в поиске того же.

Я придумал только следующие, которые короче, но не красивее:

,/(N0 ,. ])"0 N1

;(N0 ,. ]) &.> N1

или в виде:

;N0&,.&.>N1
person Eelvex    schedule 15.11.2012
comment
Это неплохо. Я поговорил с kaleidic в Твиттере (наш третий постоянный J на ​​SO), и позже у нас будет интересный ответ. Я не хочу спойлерить здесь :) - person MPelletier; 16.11.2012
comment
(заглянул в твиттер) Ох! Каталог! Это очевидно, когда вы это знаете... :) - person Eelvex; 16.11.2012