2016-11-07 57 views
1

我在玩ruby中的一些数据并尝试创建嵌套的哈希结构...假设我有两个表,我将其转换为哈希表...一个表是团队攻击,另一个是通过攻击,我既想加入到一个键=队一个数据结构...Ruby中是否有任何类似sql的连接?

全队的进攻......

Tm,table_name,Season,Offensive_Rank,G,PF,Yds,Ply,Y/P,TO,FL,1stD,Cmp,Att,Yds,TD,Int,NY/A,1stD,Att,Yds,TD,Y/A,1stD,Pen,Yds,1stPy,Sc%,TO%,EXP 
Carolina Panthers,team-offence,2015,1,16,500,5871,1060,5.5,19,9,357,300,501,3589,35,10,6.7,197,526,2282,19,4.3,136,103,887,24,42.9,9.6,125.65 
Carolina Panthers,team-offense,2014,19,16,339,5547,1060,5.2,23,11,347,327,545,3511,23,12,6,199,473,2036,10,4.3,117,83,756,31,34.8,11.8,29.83 
Carolina Panthers,team-offense,2013,18,16,366,5069,999,5.1,19,6,319,292,473,3043,24,13,5.9,169,483,2026,14,4.2,122,80,671,28,36.5,9.4,70.12 

团队传递...

Tm,table_name,Season,Passing_rank,G,Cmp,Att,Cmp%,Yds,TD,TD%,Int,Int%,Lng,Y/A,AY/A,Y/C,Y/G,Rate,Sk,Yds,NY/A,ANY/A,Sk%,4QC,GWD,EXP 
Carolina Panthers,team-passing,2015,24,16,300,501,59.9,3589,35,7,10,2,74,7.7,8.2,12.9,224.3,99.2,33,284,6.7,7.2,6.2,3,4,122.36 
Carolina Panthers,team-passing,2014,19,16,327,545,60,3511,23,4.2,12,2.2,51,7,6.9,11.7,219.4,86.2,42,317,6,5.8,7.2,3,2,56.09 
Carolina Panthers,team-passing,2013,29,16,292,473,61.7,3043,24,5.1,13,2.7,79,7.1,6.9,11.6,190.2,88.8,43,336,5.9,5.7,8.3,4,4,54.85 

我可以创建单独的哈希'表'

{"Carolina Panthers" => [ {team-offense...}, {...}, {...} ] } 
{"Carolina Panthers" => [ {team-passing...}, {...}, {...} ] } 

有没有一种方法来创建关键=队在我的数据结构将是两套散“表”的加入,如...

{"Carolina Panthers" => [ {team-offense...}, {...}, {...} ], 
          [ {team-passing...}, {...}, {...} ] } 

我知道这可能不是一种最直观的做事方式,但我试图用数据做一些“有趣”的数据结构。

+0

Ruby的[Enumerable](https://ruby-doc.org/core-2.3.1/Enumerable.html)库充满了可以帮助解决这个问题的东西,以及诸如['Array#product' ](https://ruby-doc.org/core-2.3.1/Array.html#method-i-product)。 – tadman

+0

谢谢。我会看一下。 – antimuon

回答

1
>> hash1 = {"Carolina Panthers" => ['team offense'] } 
>> hash2 = {"Carolina Panthers" => ['team passing'] } 
>> hash3 = hash1.keys.map { |team_name| [team_name, [hash1[team_name], hash2[team_name]]] }.to_h 
=> {"Carolina Panthers"=>[["team offense"], ["team passing"]]} 

这就是说,你将通过创建自定义类并使用具有属性的对象来存储数据而得到极大的帮助。这种复杂的数据结构会让你头疼。祝你好运!

+0

谢谢!我也很欣赏自定义类的建议。我刚刚开始使用红宝石,所以还不确定如何有效地做事,但试图通过做我在概念上理解的事情来学习,虽然它可能不是优雅的! – antimuon

0

我想我沿着我所期待的。我被截断的列,所以我可以张贴的样本数据结构线的东西...

pp team_offense.merge(team_passing) { |key, off, pass| [*off].to_a + [*pass].to_a }.select { |team| team == 'Carolina Panthers' } 

{"Carolina Panthers"=> 
    [{:table_name=>"team-offense", :season=>2015, :offensive_rank=>1}, 
    {:table_name=>"team-offense", :season=>2014, :offensive_rank=>19}, 
    {:table_name=>"team-offense", :season=>2013, :offensive_rank=>18}, 
    {:table_name=>"team-passing", :season=>2015, :passing_rank=>24}, 
    {:table_name=>"team-passing", :season=>2014, :passing_rank=>19}, 
    {:table_name=>"team-passing", :season=>2013, :passing_rank=>29}]} 
相关问题