【问题标题】:Are there any sql-like joins for ruby?ruby 是否有类似 sql 的连接?
【发布时间】:2016-11-08 06:23:13
【问题描述】:

我正在用 ruby​​ 处理一些数据并尝试创建嵌套的哈希结构...假设我有两个表可以转换为哈希...一个表是团队进攻,另一个是传球进攻和我想在 key = team 上将两者加入一个数据结构...

团队进攻...

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...}, {...}, {...} ] }

有没有办法在 key = team 上创建联接,其中我的数据结构将是两组哈希“表”,例如...

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

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

【问题讨论】:

  • Ruby 的 Enumerable 库中有很多东西可以帮助解决这个问题,还有像 Array#product 这样的东西。
  • 谢谢。我去看看。

标签: ruby join hash


【解决方案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"]]}

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

【讨论】:

  • 谢谢!我也很欣赏有关自定义课程的建议。我刚开始使用 ruby​​,所以还不确定如何有效地做事,但尝试通过做我在概念上理解的事情来学习,尽管它可能并不优雅!
【解决方案2】:

我想我得到了一些我正在寻找的东西...我截断了列,以便发布示例数据结构...

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}]}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多