-1

私は次のものを持っています:

  department = data.css('#ref_2619534011')

  @department_hash = Hash.new {|h,k| h[k]=[]}
  department.css('.narrowValue').each do | department |
    @department_hash["department"] << department.text
  end 

これは次のようなものを出力します:

{"department"=>["15,721", "243,247", "510,260", "46,007", "14,106", "358", "5,787", "19,808"]}

今、それらの合計数のタイトルを取得したい

 department.css('.refinementLink').each do

これは次のようなものを出力します:

{"department"=>["Bird", "Cats", etc ]}

両方を混ぜて、次のようなネストされたハッシュを生成したい:

{departments: { "Pet Supplies": [ "Birds" : 15,721, "Cats" : 243,247, etc ] }}

それを達成する方法は?

編集:

私はこれを試しましたが、うまくいきませんでした:

 @department_hash = Hash.new {|h,k| h[k]=[]}
  department.css('li').each do | department |
    department_title = department.css('.refinementLink').text
    department_count = department.css('.narrowValue').text[/[\d,]+/]
  end 

  @department_hash["department"] = Hash[department_title.zip(department_count)]
4

1 に答える 1

1

Array#zip両方の配列を組み合わせるために使用できます。

numbers = ["15,721", "243,247"]
animals = ["Birds", "Cats"]

Hash[animals.zip(numbers)]
#=> {"Birds"=>"15,721", "Cats"=>"243,247"}

あなたの編集について:

既にdepartment_titleanddepartment_countが整っているため、ループ内で次のようなものが機能するはずです。

@department_hash = {}
department.css('li').each do |department|
  department_title = ...
  department_count = ...
  @department_hash["department"] ||= {}   # ensure empty hash
  @department_hash["department"][department_title] = department_count
end
于 2013-08-12T07:39:45.950 に答える