从散列值中获取数组/列表(在Hash中)

时间:2014-11-25 15:28:29

标签: ruby hash

由于我想在response_time上做一些统计数据,我正在寻找一种简单的方法来获取数组或列表中的所有response_time以计算平均响应时间,中位数作为一个Ruby初学者,当哈希包含许多哈希值时,我总是卡住。

{
    0 => {
      :name => "log_endpoint",
      :response_time => "18"
    },   
    1 => {
      :name => "auth_endpoint"
      :response_time => "16"
    },
    2 => {
      :name => "get_friends_endpoint"
      :response_time => "16"
    },
    3 => {
      :name => "get_friends_endpoint"
      :response_time => "10"
    },
    4 => {
      :name => "log_endpoint",
      :response_time => "14"
    }
}

再次感谢您的帮助,

微米。

2 个答案:

答案 0 :(得分:1)

假设您的哈希被称为stats,您可以这样做:

response_times = stats.values.map{ |s| s[:response_time] }

这将遍历外部哈希中的所有值,并从所有内部哈希中收集:respnose_time

这里有效:http://ideone.com/NwOTIg

答案 1 :(得分:1)

您可以对哈希的每个值使用collect来将您想要的内容收集到数组中。假设您的哈希被称为informationinformation.values将为您提供information中每个值的数组,然后在该数组上调用collect,将具有给定条件的每个元素添加到数组中: / p>

array_of_stuff = information.values.collect{ |info| info[:response_time] }

注意:我看到w0lf发布了一个非常相似的答案。据我所知,map和collect会做同样的事情,我只是觉得在这种情况下收集声音更合乎逻辑。