Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- t = Time.now
- items = Rating.all(:select => "content_id, viewer_id, viewer_type, rate").inject([]) do |mem, rating|
- item = rating.content_id.to_i
- user = "#{rating.viewer_type}_#{rating.viewer_id}".to_sym
- (mem[item] ||= {})[user] = rating.rate
- mem
- end
- # iterate over items
- items.each_with_index do |pivot_users, pivot|
- next if pivot_users.blank?
- #iterate over the items with higher index
- items.from((pivot+1)..-1).each_with_index do |deviant_users, deviant|
- next if deviant_users.blank?
- common_users = pivot_users.keys + deviant_users.keys
- diff_sum = common_users.inject(0) { |sum, user| sum += pivot_users[user]-deviant_users[user] }
- mean_diff = diff_sum/common_users.size
- end
- end
- puts (Time.now-t)
Add Comment
Please, Sign In to add comment