【问题标题】:How to get each value from hash of array?如何从数组的哈希中获取每个值?
【发布时间】:2017-01-12 10:07:46
【问题描述】:

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

如何从数组的散列中映射每个键值?

【问题讨论】:

  • .each循环遍历它
  • 我已经试过了。我希望哈希键的第一个值作为我方法中的第一个参数,每个键的第二个值作为第二个参数。 15 和 24 是 pdf id 和 15-->001 ,其中 001 是页码。我想传递 001 作为每个 pdf 的第二个参数。
  • 当您开始使用 ruby​​/rails 时,您必须对 ruby​​ 中的 Array、Hash、String 方法的文档有所了解,我们最终会在每个代码中使用它们

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


【解决方案1】:

一个简单的嵌套循环就足够了:

session[:selected_pages].each do |pdf_id, page_numbers|
  page_numbers.each { |page_number| GetPageContent.new(pdf_id, page_number) }
end

【讨论】:

    【解决方案2】:

    你可以使用这样的东西

    hsh = {"15"=>["001"], "24"=>["001","005"]}
    
    hsh.each(&->(page, pages){pages.each{|id| GetPageContent.new(id, page)}})
    

    【讨论】:

      【解决方案3】:

      你可以做这样的事情来得到一个简单的数组。 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) }
      

      【讨论】:

        【解决方案4】:
        session[:selected_pages]
        .map{|k, v| [k].product(v)}.flatten(1)
        # => [["15", "001"], ["24", "001"], ["24", "005"]]
        

        剩下的看你自己了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-17
          • 2011-04-16
          • 2010-09-08
          • 1970-01-01
          • 1970-01-01
          • 2013-01-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多