2

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

@products = {
  2 => [
    #<Review id: 9, answer01: 3, score: 67, style_id: 2, consumer_id: 2,
    branch_id: 2, business_id: 2>
  ],
  15 => [
    #<Review id: 10, answer01: 3, score: 67, style_id: 2, consumer_id: 2,
    branch_id: 2, business_id: 2>,
    #<Review id: 11, answer01: 3, score: 67, style_id: 2, consumer_id: 2,
    branch_id: 2, business_id: 2>
  ]
}

各製品のハッシュ キーに関連付けられたすべてのレビューのスコアを平均したいと考えています。これどうやってするの?

4

3 に答える 3

10

ハッシュを反復処理するには:

hash = {}
hash.each_pair do |key,value|
  #code
end

配列を反復処理するには:

arr=[]
arr.each do |x|
  #code
end

したがって、配列のハッシュを反復処理する (たとえば、ハッシュの各ポイントで各配列を反復処理しているとしましょう) は、次のように実行されます。

hash = {}
hash.each_pair do |key,val|
  hash[key].each do |x|
    #your code, for example adding into count and total inside program scope
  end
end
于 2012-11-03T03:18:12.037 に答える
6

はい、map各製品のスコアを作成して配列し、配列の平均を取ります。

average_scores = {}
@products.each_pair do |key, product|
  scores = product.map{ |p| p.score }
  sum = scores.inject(:+) # If you are using rails, you can also use scores.sum
  average = sum.to_f / scores.size
  average_scores[key] = average
end
于 2012-11-03T03:31:18.600 に答える
1

答えてくれてありがとうShingetsu、私は確かに賛成します。たまたま自分で答えを見つけました。

trimmed_hash = @products.sort.map{|k, v| [k, v.map{|a| a.score}]}
trimmed_hash.map{|k, v| [k, v.inject(:+).to_f/v.length]}
于 2012-11-03T03:31:27.570 に答える