Превращение этого списка в вектор множеств - PullRequest
0 голосов
/ 04 января 2019

У кого-нибудь есть идеи, как преобразовать этот список векторов в вектор множеств?

([#{2}] [#{1 2 3 4}] [#{5}] [#{3}])

результат должен быть

[#{2} #{1 2 3 4} #{5} #{3}]

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Несколько способов сделать это. Какой подход вы используете, зависит от ваших потребностей:

(def data '([#{2}] [#{1 2 3 4}] [#{5}] [#{3}]))

;; If you have a list of single element lists:
(mapv first data) ;; => [#{2} #{1 2 3 4} #{5} #{3}]

;; If you have a list of multiple element lists:
(vec (apply concat data)) ;; => [#{2} #{1 2 3 4} #{5} #{3}]

;; If you also want to handle multiple levels of nesting:
(vec (flatten data)) ;; => [#{2} #{1 2 3 4} #{5} #{3}]

;; If you ..;
(transduce (map first) conj data) ;; => [#{2} #{1 2 3 4} #{5} #{3}]
0 голосов
/ 05 января 2019

Способ, который я не видел, предложил использовать into и cat.

(def data '([#{2}] [#{1 2 3 4}] [#{5}] [#{3}]))
(into [] cat data) => [#{2} #{1 4 3 2} #{5} #{3}]
0 голосов
/ 05 января 2019

Обратите внимание, что наборы являются просто элементами векторов.

Таким образом, один из способов - выполнить итерацию (map) по списку векторов и выбрать элемент first каждого вектора (то есть набора). Это создаст список этих наборов, которые вы можете затем преобразовать в вектор:

user=> (vec (map first '([#{2}] [#{1 4 3 2}] [#{5}] [#{3}])))
[#{2} #{1 4 3 2} #{5} #{3}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...