我将“选票”数组设置为ID,在另一个数组中进行分级。
[["1250", "5"],
["1250", "5"],
["1250", "5"],
["1250", "5"],
["1250", "4"],
["1250", "5"],
["1250", "5"],
["1252", "2"],
["1252", "5"],
["1252", "4"],
["1252", "3"],
["1252", "5"],
["1252", "4"],
["1252", "4"],
["1254", "5"],
["1254", "4"],
["1254", "4"],
["1257", "5"],
["1257", "5"],
["1257", "4"],
["1257", "5"],
...]有x的倍数,我想合并,并保持所有的y与x有关的可访问性。基本上,我必须平均所有的选票(y)的一个特定的id (x),我不知道如何做。此外,这些选票(y)以后必须“加权”不同的数额,因此,我认为,保持对他们的访问将是有帮助的。
坦率地说,我甚至不知道这是什么,所以我不知道该查找什么:/我尝试合并,将y推到arrayx上,还有一些复杂的“为唯一的x-”只是想不出该怎么处理这个问题。
最终目标可以是这样的:
[["1250", ["5", "5", "5", "4", "5", "5"]],
["1252", ["2", "5", "4", "3", "5", "4", "4"]],
["1254", ["5", "4", "4"]],
["1257", ["5", "5", "4", "5"]],
...]发布于 2015-07-13 21:17:49
[["1250", "5"],
["1250", "5"],
["1250", "5"],
["1250", "5"],
["1250", "4"],
["1250", "5"],
["1250", "5"],
["1252", "2"],
["1252", "5"],
["1252", "4"],
["1252", "3"],
["1252", "5"],
["1252", "4"],
["1252", "4"],
["1254", "5"],
["1254", "4"],
["1254", "4"],
["1257", "5"],
["1257", "5"],
["1257", "4"],
["1257", "5"]]
hsh = Hash.new{|h,k| h[k] = []}
# hsh stores the key with an empty array if it does not "know" a key
votes.each_with_object(hsh){|(id, vote), h| h[id] << vote}
# add vote to the array when hsh "knows" the key.
p hsh
# =>{"1250"=>["5", "5", "5", "5", "4", "5", "5"], "1252"=>["2", "5", "4", "3", "5", "4", "4"]...}发布于 2015-07-13 20:18:46
一个简短的解决方案。
my_array = [ .... ]
my_array.group_by(&:first).map { |k,v| [k, v.map { |_,y| [y] }.reduce(:+)] }它使用可枚举方法group_by()、map()、reduce()。
编辑:附加说明
通过一个小的适应性,上面的解决方案还积累了ys的值。我猜这是这个问题的主要内涵,但事实并非如此。
my_array.group_by(&:first).map { |k,v| [k, v.map { |_,y| y.to_i }.reduce(:+)] }发布于 2015-07-13 20:24:28
我会这样做:
array.group_by(&:first).map { |k, v| [k, v.map(&:last)] }https://stackoverflow.com/questions/31392253
复制相似问题