2011-04-04 78 views
3

如果我有这样的如何找出一组地图中的所有键?

(def a #{ 
      {:a 1 :b 2} 
      {:a 3 :b 4} 
      {:b 1 :c 2} 
      {:d 1 :e 2} 
      {:d 1 :y 2} 
}) 

一组地图:我怎么可以找到所有的钥匙?这样做:

(find-all-keys a) 

:回报:

(:a :b :c :d :e :y) 

回答

0

喜欢的东西:

user=> (into #{} (flatten (map keys a))) 
#{:y :a :c :b :d :e} 
+1

这是破碎的:扁平化太过于积极。一个简单的mapcat就足够了。考虑'(放入#{}(flatten(map keys [{[1 2] 0}])))',它返回'#{1 2}'而不是正确的#{[1 2]}'。 – amalloy 2011-04-04 19:20:44

+0

是的,我明白这一点 - 我总是忘记mapcat - 我通常使用通用列表操作函数... – 2011-04-04 19:40:58

11

另一种方式:

(distinct (mapcat keys a)) 
4

几乎相同的方式:

(set (mapcat keys a)) 
0

另一种方式:

(reduce #(into %1 (keys %2)) #{} a) 
相关问题