如何将此Ruby哈希转换为数组?

如何将此Ruby哈希转换为数组?,ruby,arrays,hash,Ruby,Arrays,Hash,我在散列中有这些数据: [{"total_time"=>"00:04:48.563044"}, {"total_time"=>"00:05:29.835918"}, {"total_time"=>"00:09:38.622569"}] 但我想要这个: ["00:04:48.563044", "00:05:29.835918", "00:09:38.622569"] 需要使用Ruby 1.8.7。您可以通过以下方式进行管理: list.collect(&:values

我在散列中有这些数据:

[{"total_time"=>"00:04:48.563044"}, {"total_time"=>"00:05:29.835918"}, {"total_time"=>"00:09:38.622569"}]
但我想要这个:

["00:04:48.563044", "00:05:29.835918", "00:09:38.622569"]

需要使用Ruby 1.8.7。

您可以通过以下方式进行管理:

list.collect(&:values).flatten

您可以通过以下方式进行管理:

list.collect(&:values).flatten

有很多方法可以做到这一点。让我们将其分解为您需要完成的基本步骤:

  • 迭代哈希数组中的每个项
  • 对于每个项目,获取时间值
  • 把它们重新组合成一个列表
  • 因为您想要获取每个项目的结果,而不仅仅是查看它,所以您需要使用
    map
    (或者
    collect
    ,它们是相同的方法)。这将处理步骤1和3。第二步本身就很简单。您只需要使用
    项['total_time']
    获取键的值。把它们放在一起,你就得到了:

    times.map{ |time| time['total_time'] }
    

    有很多方法可以做到这一点。让我们将其分解为您需要完成的基本步骤:

  • 迭代哈希数组中的每个项
  • 对于每个项目,获取时间值
  • 把它们重新组合成一个列表
  • 因为您想要获取每个项目的结果,而不仅仅是查看它,所以您需要使用
    map
    (或者
    collect
    ,它们是相同的方法)。这将处理步骤1和3。第二步本身就很简单。您只需要使用
    项['total_time']
    获取键的值。把它们放在一起,你就得到了:

    times.map{ |time| time['total_time'] }
    

    谈到实现这一目标的许多方法:

    a = [{"total_time"=>"00:04:48.563044"}, {"total_time"=>"00:05:29.835918"}, {"total_time"=>"00:09:38.622569"}]
    
    p a.map(&:flatten).map(&:last)
    

    谈到实现这一目标的许多方法:

    a = [{"total_time"=>"00:04:48.563044"}, {"total_time"=>"00:05:29.835918"}, {"total_time"=>"00:09:38.622569"}]
    
    p a.map(&:flatten).map(&:last)
    

    对于那些不太熟悉Ruby的人来说,
    collect
    map
    是一样的。还有,
    收集
    映射
    可以用来改变对象而不是创建一个新的对象。在这种非常特殊的情况下,
    map
    调用可能更简单,但我发布的代码片段是一种通用模式,适用于各种情况。这是“给我一个一维数组中多个散列的值”方法。
    collect
    map
    对于那些不太熟悉Ruby的人是一样的。还有,
    收集
    映射
    可以用来改变对象而不是创建一个新的对象。在这种非常特殊的情况下,
    map
    调用可能更简单,但我发布的代码片段是一种通用模式,适用于各种情况。这是“给我一个一维数组中多个散列的值”的方法。有很多方法,但我认为这是合理的。在这种情况下,可能是一个带{}的单行程序,而不是do/end?这么短的代码看起来有点奇怪。是的,多行语法是我在写的时候修改过的。我会更新的。有很多方法,但我认为这是合理的。在这种情况下,可能是一个带{}的单行程序,而不是do/end?这么短的代码看起来有点奇怪。是的,多行语法是我在写的时候修改过的。我会更新它。@undur_gongor然后请将其作为curiosity@undur_gongor那么请把它当作一种好奇心