Clojure csv要映射为{:key1#{a,b,c},:key2#{n,m,k}}

时间:2019-02-07 17:45:27

标签: clojure

加载后:

if (cur.item.equals(item))

我明白了:

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

现在,我想将其转换为具有唯一键的地图,并将其设置为以下值:

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

我的目标是能够查词,说出并返回“获取,携带”

2 个答案:

答案 0 :(得分:1)

  

我的目标是能够查词,说出并返回“获取,携带”

不能完全确定您的目标,但这并不能阻止我实现一个能够获取单词的所有同级项的功能。我认为您不需要带有随机密钥的地图,还是吗?请注意,集合被实现为哈希映射,其中值与键相同(例如#{: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的单词集。由于when,不包含该单词的单词集变为nil,而mapcat删除了nil条目,并将其余条目合并到一个平面列表中。

例如,

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

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

(siblings "non existing")
;; => '()

答案 1 :(得分:0)

我能够得到类似的东西,为我做窍门。

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"}})