2016-07-29 11 views
-1

私がしようとしているのは、列のリストを与え、列形式の配列を取得することです。私は列名の配列を持っています、そして、キーは列名であり、値は列が必要とする形式です。指定された列のハッシュに値がない場合、結果の配列にはnilでなければなりません。考えるハッシュを使用して配列を変換するにはどうすればよいですか?

report_columns = ["val1", "val2", "subtotal", 
        "othertotal", "grand_total", "moar_total"] 
    column_formats = {"grand_total" => @highlight_money, 
        "subtotal" => @money} 

は、私は簡単にこのコードでそれを行うことができます。

datatype_array = [] 
    report_columns.each {|col| datatype_array << column_formats[col] } 
    # do stuff with datatype_array 

しかし、これはルビーです。これを行うためのより簡潔な方法があります!私が迷っている魔法を教えてください。

答えて

2

最初に試したのは、配列に蓄積するeachではなく、単純なmapです。

datatype_array = report_columns.map { |c| column_formats[c] } 

また、個々の引数として複数のキー名を期待する、Hash#values_atに列の配列をスプラットことができます。

datatype_array = column_formats.values_at(*report_columns) 
+0

私は改善、あるいは近い第二の余地が表示されません。 –

+0

FWIW Ruby 2.3には 'Hash#to_proc'がありますので、' report_columns.map(&column_formats) 'を実行できます。 –

+0

そして 'ハッシュ#to_proc'がなければ、' report_columns.map(&column_formats.method(:[])) 'を実行することができます。 –

関連する問題