2011-04-04 79 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) 
相關問題