首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Ruby中整合多维数组

在Ruby中整合多维数组
EN

Stack Overflow用户
提问于 2015-07-13 19:54:45
回答 6查看 78关注 0票数 1

我将“选票”数组设置为ID,在另一个数组中进行分级。

代码语言:javascript
运行
复制
[["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-”只是想不出该怎么处理这个问题。

最终目标可以是这样的:

代码语言:javascript
运行
复制
[["1250", ["5", "5", "5", "4", "5", "5"]],
 ["1252", ["2", "5", "4", "3", "5", "4", "4"]],
 ["1254", ["5", "4", "4"]],
 ["1257", ["5", "5", "4", "5"]],
...]
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-07-13 21:17:49

代码语言:javascript
运行
复制
[["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"]...}
票数 1
EN

Stack Overflow用户

发布于 2015-07-13 20:18:46

一个简短的解决方案。

代码语言:javascript
运行
复制
my_array = [ .... ]
my_array.group_by(&:first).map { |k,v| [k, v.map { |_,y| [y] }.reduce(:+)] }

它使用可枚举方法group_by()map()reduce()

编辑:附加说明

通过一个小的适应性,上面的解决方案还积累了ys的值。我猜这是这个问题的主要内涵,但事实并非如此。

代码语言:javascript
运行
复制
my_array.group_by(&:first).map { |k,v| [k, v.map { |_,y| y.to_i }.reduce(:+)] }
票数 3
EN

Stack Overflow用户

发布于 2015-07-13 20:24:28

我会这样做:

代码语言:javascript
运行
复制
array.group_by(&:first).map { |k, v| [k, v.map(&:last)] }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31392253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档