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

标签 ruby sorting

我所拥有的:具有不同大小的哈希数组。

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/

相关文章:

Javascript:将包含日期的数组按降序排序

python - 如何在 python 子列表中填写未使用的 ip 地址?

ruby - 如何使用socksify gem(代理)抓取网站

ruby-on-rails - Multi-Tenancy 应用程序的授权 gem?

ruby-on-rails - ActiveRecord 对象是否没有属性的实例变量而只有方法?

ruby - Ruby 如何知道 '/' 何时是除号,以及何时开始正则表达式?

Java数组改变一半的值等

ruby - 使用 nokogiri builder (ruby) 设置标签属性并向标签添加纯文本内容

Python 函数基于参数进行排序和操作

mysql - 对在mysql中存储为varchar的数字进行排序