3, "data"=>[ {"email"=>"foo@example.org", "timestamp"=>"2013-03-16 01:-6ren">
gpt4 book ai didi

ruby - 如何有效地从哈希的哈希中提取具有特定键名的所有值?

转载 作者:数据小太阳 更新时间:2023-10-29 07:45:21 24 4
gpt4 key购买 nike

我有这个数据:

members = {"total"=>3, "data"=>[
{"email"=>"foo@example.org", "timestamp"=>"2013-03-16 01:11:01"},
{"email"=>"bar@example.org", "timestamp"=>"2013-03-16 02:07:30"},
{"email"=>"exx@example.org", "timestamp"=>"2013-03-16 03:06:24"}
]}

并且想要生成一个像这样的数组:

["foo@example.org", "bar@example.org", "exx@example.org"]

目前我正在使用:

members['data'].collect { |h| h['email'] }
  1. 在性能方面是否有更有效的方法来实现它?
  2. 有没有更短的方法来实现它?

我有可用的 Rails。

最佳答案

除了其他答案之外,如果您能够使用 symbols 作为 keys 构造 Hash,我将添加在收集值时获得性能,例如:

require 'benchmark'

members_without_sym = {"total"=>3, "data"=>[
{"email"=>"foo@example.org", "timestamp"=>"2013-03-16 01:11:01"},
{"email"=>"bar@example.org", "timestamp"=>"2013-03-16 02:07:30"},
{"email"=>"exx@example.org", "timestamp"=>"2013-03-16 03:06:24"}
]}

members_with_sym = {:total=>3, :data=>[
{:email=> "foo@example.org", :timestamp => "2013-03-16 01:11:01"},
{:email=> "bar@example.org", :timestamp => "2013-03-16 02:07:30"},
{:email=> "exx@example.org", :timestamp=> "2013-03-16 03:06:24"}
]}

Benchmark.bm(1) do |algo|
algo.report("Without symbol"){
2_000_000.times do
members_without_sym['data'].collect { |h| h['email'] }
end
}
algo.report("With symbol"){
2_000_000.times do
members_with_sym[:data].collect { |h| h[:email] }
end
}
end

结果:

        user     system      total        real
Without symbol 2.260000 0.000000 2.260000 ( 2.254277)
With symbol 0.880000 0.000000 0.880000 ( 0.878603)

关于ruby - 如何有效地从哈希的哈希中提取具有特定键名的所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15450059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com