Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将列表转换为Clojure中列表映射列表中的集合_Clojure - Fatal编程技术网

将列表转换为Clojure中列表映射列表中的集合

将列表转换为Clojure中列表映射列表中的集合,clojure,Clojure,我有一个映射列表,其中每个键都与一个字符串列表相关联 我想将这些字符串列表转换为集合 (def list-of-maps-of-lists '({:a ["abc"]} {:a ["abc"]} {:a ["def"]} {:x ["xyz"]} {:x ["xx"]})) 这是我迄今为止最好的尝试: (flatten (map (fn [amap] (for [[k v] amap] {k (set v)})) list-of-maps-of-lists)) => ({:a #{"a

我有一个映射列表,其中每个键都与一个字符串列表相关联

我想将这些字符串列表转换为集合

(def list-of-maps-of-lists '({:a ["abc"]} {:a ["abc"]} {:a ["def"]} {:x ["xyz"]} {:x ["xx"]}))
这是我迄今为止最好的尝试:

(flatten (map (fn [amap] (for [[k v] amap] {k (set v)})) list-of-maps-of-lists))

=> ({:a #{"abc"}} {:a #{"abc"}} {:a #{"def"}} {:x #{"xyz"}} {:x #{"xx"}})
这个问题的惯用解决方案是什么?

这与您的解决方案非常相似

使用列表理解:

(map
  #(into {} (for [[k v] %] [k (set v)]))
  list-of-maps-of-lists)
备选方案:

(map
  #(zipmap (keys %) (map set (vals %)))
  list-of-maps-of-lists) 

我更喜欢使用
clojure.contrib
中的函数解决此类问题:

(map (partial fmap set)
     list-of-maps-of-lists)

更新:根据,
fmap
已移动到库的名称空间。

另一种选择:
(map#(应用合并(map(map(fn[[k v]]{k(set v)})%))列表)
和另一种:
(map(部分减少kv(fn[ak v](assoc a k(set v)){})列表列表列表)
谢谢!看起来真的很有用。根据这个,它被移到了这里: