如何从数组的哈希值中获取每个值?

时间:2017-01-12 10:07:47

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2

我有一个带有键的数组哈希值,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)

如何映射数组哈希中的每个键值?

4 个答案:

答案 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"]]

其余由你决定。