如何合并ActiveRecord::Relation对象并只添加值,而不添加键



我有一个关于Ruby编程的简单问题。我是Ruby的新手,所以如果有人能帮我,我会非常感激的。

假设一个系统允许用户获得买家和卖家的反馈评级。我想将用户的买入和卖出反馈评级添加/合并为一个合并评级,因此只需要从两个Relation对象中添加评级。用户id仅用作密钥,但不会添加。

buy_rating = user_object.group(buy_feedback_rating).select('buy_feedback_rating, COUNT(id) as count')
sell_rating = user_object.group(sell_feedback_rating).select('sell_feedback_rating, COUNT(id) as count')

buy_ratingsell_rating是用户买入/卖出评级的直方图,其中1=可怕,2=差,3=一般,4=好,5=非常好。

以下是一个带有(key,value)对的示例数组,其中key=评级从1到5,value=评级数

买入评级=[(1,2),(2,5),(3,1),(4,7),(5,6)]

卖出评级=[(1,3)、(2,2)、(3,7)、(4,4)、(5,7)]

期望输出=[(1,5)、(2,7)、(3,8)、(4,11)、(5,13)]

(只将每个数组中的第二个值相加,而不是第一个值)。

如果值>0,buy_rating和sell_rating数组将只有key->value对。这意味着,如果买家没有买家评级=1,那么这对(1,0)将不存在于buy_rating数组中。这意味着阵列可以如下:

buy_rating=[[2,5],[3,1],[4,7]]

sell_rating=[[1,3],[2,2],[5,7]]

问题是,我如何达到预期的结果?我只想从每个数组中添加第二列,而不是第一列。返回的对象应该与buy_ratingsell_rating具有相同的数据类型,即buy_rating和sell_rating都是ActiveRecord::Relation对象,结果也应该是ActiveRecord::Relation对象。

您可以制作一个值映射,根据第一个值求和,索引,然后转换回数组

buy_rating = [[1,2],[2,5],[3,1],[4,7],[5,6]]
sell_rating = [[1,3],[2,2],[3,7],[4,4],[5,7]]
merged_ratings = buy_rating + sell_rating
composite_ratings = Hash.new(0)
merged_ratings.each do |rating|
composite_ratings[rating[0]]+=rating[1]
end
composite_ratings.to_a

检查这个小提琴:http://rubyfiddle.com/riddles/2d0f9/2

最新更新