2012-01-13 4 views

答えて

5

あなたはこれを管理することがあります

list.collect(&:values).flatten 
+0

'collect'が持つあまり馴染みのそれらのためのmap''と同じですがルビー。また、 'collect!'や 'map!'は、新しいオブジェクトを作成するのではなく、オブジェクトを変更するために利用できます。 – Nick

+0

これはあまりに複雑ですので、単純なマップは... – tokland

+1

'map'コールはこの非常に特殊なケースではもっと簡単かもしれませんが、私が投稿したスニペットは広範囲の状況で動作する一般的なパターンです。これは「1次元配列の複数のハッシュから値を得る」メソッドです。 – tadman

3

これを実現する方法のトンがあります。あなたが達成するために必要な基本的なステップにそれを打破してみましょう:各項目に対してハッシュ

  • の配列内の各アイテムを超える

    1. 反復、時間値をつかむ
    リストにそれらを組み立てます

    各アイテムの結果を表示するだけでなく、map(またはcollect、実際は同じ方法です)を使用します。それはステップ1とステップ3の世話をするでしょう。そして、ステップ2はそれだけでかなり簡単です。 item['total_time']でキーの値を取得するだけです。一緒にすべてを入れて、あなたは、この持っている:

    times.map{ |time| time['total_time'] } 
    
  • +2

    そこにはたくさんの方法がありますが、これは合理的です。この場合、do/endの代わりに{}を使用すると1行になるでしょうか?それはコードがとても奇妙に見えます。 – tokland

    +0

    ええ、私が書いていた間、複数行の構文はリビジョンの残りでした。私はそれを更新します。 – Emily

    0

    これを実現する方法のトンについて話すこと:

    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) 
    
    +0

    1.8.7では動作しません( 'Hash'では' flatten'なし)。 –

    +0

    @undur_gongorそれから好奇心として取ってください – maprihoda

    関連する問題