2016-07-29 37 views
-1

我想要做的是給列的列表,獲取列格式的數組。我有一個列名稱的數組,並且a的關鍵字是列名稱,值是該列所需的格式。如果給定列的哈希中沒有值,則它在結果數組中不需要爲零。如何使用散列來轉換數組?

考慮:

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

你第一次嘗試應該是一個簡單的map而不是一個each累積到一個數組。

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

沒有'Hash#to_proc',你可以做'report_columns.map(&column_formats.method(:[]))'' –