Clojure CSV для отображения, как {: key1 # {a, b, c},: key2 # {n, m, k}} - PullRequest
0 голосов
/ 07 февраля 2019

После загрузки:

(csv/read-csv "Fetch, get, bring \n  Take, receive, accept")

Я получаю:

(["Fetch" " get" " bring "] ["  Take" " receive" " accept"])

Теперь я хочу превратить его в карту с уникальными ключами и задать в качестве значений:

[:key1 #{Fetch, get, bring}, :key2 #{Take, receive, accept}]

Моя цель - найти слово, сказать «получить» и вернуть «Получить, принести»

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Моя цель - найти слово, сказать, получить и вернуть "Получить, принести"

Не совсем уверен в своей цели, но это не остановило меняот реализации функции, которая получает все братья и сестры слова.Я не думаю, что вам нужна карта со случайными ключами, или вы?Обратите внимание, что набор реализован в виде хэш-карты, где значения совпадают с ключами (например, #{:a :b} - это обтекание {:a :a, :b :b}).

Теперь сначала проанализируйте данные в спискенаборов слов:

(def word-sets
  (map (comp set #(map string/trim %))
       (csv/read-csv "Fetch, get, bring \n  Take, receive, accept")))
;; => (#{"bring" "Fetch" "get"} #{"accept" "Take" "receive"})

Тогда функция, чтобы получить родные слова:

(defn siblings [word]
  (mapcat #(when (contains? % word) (disj % word))
          word-sets))

Используя оператор набора contains?, мы проверяем каждый набор слов, если он содержитслово, если так, мы возвращаем этот набор с этим словом disj oined.Из-за when набор слов, который не содержит слово, становится nil, а mapcat удаляет записи nil и объединяет остальные в один плоский список.

Например,

(siblings "get")
;; => ("bring" "fetch")

(siblings "Take")
;; => ("accept" "receive")

(siblings "non existing")
;; => '()
0 голосов
/ 07 февраля 2019

Мне удалось получить что-то похожее, у меня все получилось.

inp Существо (["Получить" "получить" "принести"] ["Взять" "получить" "принять"]).

(def x (map #(into #{} %) inp))

-> [#{Fetch, get, bring} #{Take, receive, accept}]


(map #(hash-map (gensym ":key") %) x)

-> ({:key6393 #{" bring " " get" "Fetch"}} {:key6394 #{"  Take" " receive" " accept"}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...