我所拥有的:具有不同大小的哈希数组。
hashes = [{:a => 0}, {:a => 0, :b => 1}, {:a => 1, :c => 1}]
我需要什么:我需要一个包含所有键的列表。编辑:实际列表,而不是哈希。
[:a, :b, :c]
这是正确的方法吗?这感觉有点沉重。
hashes.flat_map(&:keys).uniq
或者还有其他想法?谢谢!
最佳答案
您的方式在性能和惯用语之间取得了很好的平衡。我尝试了其他几种方法。
# 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
方法,因为它不是很丑而且速度超快。
关于ruby - 获取哈希数组中所有键的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52501575/