如果我有这样的如何找出一组地图中的所有键?
(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