获取哈希数组中所有键的列表

时间:2018-09-25 15:17:36

标签: ruby sorting

我所拥有的:一系列大小不同的哈希。

hashes = [{:a => 0}, {:a => 0, :b => 1}, {:a => 1, :c => 1}] 

我需要什么:我需要所有钥匙的清单。编辑:实际列表,而不是哈希。

[:a, :b, :c]

这是正确的方法吗?感觉有点沉重。

hashes.flat_map(&:keys).uniq

还有其他想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

你很近

hashes.flat_map(&:to_a).reverse.to_h
#=> {:c=>1, :a=>0, :b=>1}

答案 1 :(得分:2)

您的方法是在表现和惯用之间取得良好的平衡。我尝试了其他一些方法。

# with reduce
hashes.map(&:keys).reduce(:|)
# with merge
hashes.each_with_object({}) { |memo, h| memo.merge! h }.keys
# manually
set = {}
hashes.each { |h| h.each_key { |k| set[k] = nil } }
set.keys

将1000个散列与每个哈希中的〜8个键合并1000次的时间(以秒为单位)

uniq   0.539034
reduce 2.194463
merge  0.090131
manual 0.911875

出于可读性考虑,您的方法将获胜。减少吮吸。手动都很慢。

我会使用merge方法,因为它不是很丑陋,而且速度很快。