我有一个带有键的数组哈希值,ruby中的值我希望用键传递每个值。我想用哈希提取内容。我的代码是:
def get_content
GetPageContent.new(@pdf.id, session[:selected_pages][@document.id.to_s])
end
在session[:selected_pages]
我得到了这样的
{"15"=>["001"], "24"=>["001","005"]}
第一个值是pdf id
,第二个值是该pdf的页码。
我想要这个:
GetPageContent.new(@pdf.id, session[:selected_pages][@document.id.to_s])
我想传递所有这样的值:
GetPageContent.new(15, 001)
GetPageContent.new(24, 001)
GetPageContent.new(24, 005)
如何映射数组哈希中的每个键值?
答案 0 :(得分:3)
一个简单的嵌套循环就足够了:
session[:selected_pages].each do |pdf_id, page_numbers|
page_numbers.each { |page_number| GetPageContent.new(pdf_id, page_number) }
end
答案 1 :(得分:2)
你可以使用这样的东西
hsh = {"15"=>["001"], "24"=>["001","005"]}
hsh.each(&->(page, pages){pages.each{|id| GetPageContent.new(id, page)}})
答案 2 :(得分:1)
你可以做这样的事情来获得一个简单的数组。 h
是你的哈希
pages = h.flat_map { |key, arr| ([key] * arr.size).zip(arr) }
=> [["15", "001"], ["24", "001"], ["24", "005"]]
pages.map! { |pdf_id, page_number| GetPageContent.new(pdf_id, page_number) }
答案 3 :(得分:1)
session[:selected_pages]
.map{|k, v| [k].product(v)}.flatten(1)
# => [["15", "001"], ["24", "001"], ["24", "005"]]
其余由你决定。