如果我有這樣的如何找出一組地圖中的所有鍵?
(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)
?
如果我有這樣的如何找出一組地圖中的所有鍵?
(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)
?
喜歡的東西:
user=> (into #{} (flatten (map keys a)))
#{:y :a :c :b :d :e}
另一種方式:
(distinct (mapcat keys a))
幾乎相同的方式:
(set (mapcat keys a))
另一種方式:
(reduce #(into %1 (keys %2)) #{} a)
這是破碎的:扁平化太過於積極。一個簡單的mapcat就足夠了。考慮'(放入#{}(flatten(map keys [{[1 2] 0}])))',它返回'#{1 2}'而不是正確的#{[1 2]}'。 – amalloy 2011-04-04 19:20:44
是的,我明白這一點 - 我總是忘記mapcat - 我通常使用通用列表操作函數... – 2011-04-04 19:40:58