首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby -从两个嵌套数组生成散列数组

Ruby -从两个嵌套数组生成散列数组
EN

Stack Overflow用户
提问于 2016-09-06 00:37:04
回答 3查看 50关注 0票数 0

我有两个嵌套的数组,它们看起来像

代码语言:javascript
复制
a = [["Codereview", 72], ["Exercise", 380], ["Prework", 220], ["Retrospective", 36]]
b = [["Codereview", 72], ["Exercise", 335], ["Prework", 118], ["Retrospective", 36]]

您可以假设数组的长度总是相同的。

我想从这两个嵌套数组中生成一个散列数组,如下所示

代码语言:javascript
复制
data = [
 { name: "Codereview", total_marks: 72, student_marks: 72 },
 { name: "Exercise", total_marks: 380, student_marks:  335 },
 { name: "Prework", total_marks: 220, student_marks: 118 },
 { name: "Retrospective", total_marks: 36, student_marks: 36 }
]

我不知道该怎么做。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-06 00:48:52

这假设两个数组的长度相同,并且它们的顺序匹配(就名称而言)。

代码语言:javascript
复制
> a.zip(b).map{|e| {name: e.first.first, total_marks: e.first.last, student_marks: e.last.last}}

=> [{:name=>"Codereview", :total_marks=>72, :student_marks=>72},
 {:name=>"Exercise", :total_marks=>380, :student_marks=>335},
 {:name=>"Prework", :total_marks=>220, :student_marks=>118},
 {:name=>"Retrospective", :total_marks=>36, :student_marks=>36}]
票数 1
EN

Stack Overflow用户

发布于 2016-09-06 00:54:53

控制台中的简单way.copying

代码语言:javascript
复制
 pry(main)> data =[]
 => []
 3] pry(main)> b_hash =b.to_h
 => {"Codereview"=>72, "Exercise"=>335, "Prework"=>118,Retrospective"=>36}
 pry(main)> a.each do |array|
 [8] pry(main)*   h = Hash.new()
 [8] pry(main)*   h["name"] = array.first
 [8] pry(main)*   h["total_marks"] = array.last
 [8] pry(main)*   h["student_marks"] = b_hash[array.first]
 [8] pry(main)*   data << h
 [8] pry(main)* end
 9] pry(main)> data
 => [{"name"=>"Codereview", "total_marks"=>72, "student_marks"=>72},
 {"name"=>"Exercise", "total_marks"=>380, "student_marks"=>335},
 {"name"=>"Prework", "total_marks"=>220, "student_marks"=>118},
 {"name"=>"Retrospective", "total_marks"=>36, "student_marks"=>36}]
票数 0
EN

Stack Overflow用户

发布于 2016-09-06 02:51:54

代码语言:javascript
复制
a = [["Codereview", 72], ["Exercise", 380], ["Prework", 220], ["Retrospective", 36]]
b = [["Prework", 118], ["Retrospective", 36], ["Codereview", 72], ["Exercise", 335]]

g = a.each_with_object({}) { |(str, val), h| h[str] = { "name"=>str, "total_marks"=>val } }
  #=> {"Codereview"=>{"name"=>"Codereview", "total_marks"=>72},
  #    "Exercise"=>{"name"=>"Exercise", "total_marks"=>380},
  #    "Prework"=>{"name"=>"Prework", "total_marks"=>220},
  #    "Retrospective"=>{"name"=>"Retrospective", "total_marks"=>36}} 
b.each_with_object(g) { |(str, val),h| h[str]["student_marks"] = val }.values
  #=> [{"name"=>"Codereview", "total_marks"=>72, "student_marks"=>72},
  #    {"name"=>"Exercise", "total_marks"=>380, "student_marks"=>335},
  #    {"name"=>"Prework", "total_marks"=>220, "student_marks"=>118},
  #    {"name"=>"Retrospective", "total_marks"=>36, "student_marks"=>36}]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39334663

复制
相关文章

相似问题

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