【问题标题】:Change a hash into an array将哈希更改为数组
【发布时间】:2013-07-20 20:27:37
【问题描述】:

我有一个 Rails 4 应用程序,用于收集教堂礼拜的出席情况。有些星期有两种服务,有些星期只有一种。我需要获取每周的总出勤率并将其显示为图表。

通过调用:

Stat.calculate(:sum, :attendance, group: :date)

在控制台中,我已经能够像这样以散列的形式收集数据:

{2013 年 1 月 6 日星期日=>66,2013 年 1 月 13 日星期日=>65,2013 年 1 月 20 日星期日=>60,2013 年 1 月 27 日星期日=>67,2013 年 2 月 3 日星期日=>60,星期日, 2013 年 2 月 10 日=>76, 2013 年 2 月 17 日星期日=>65, 2013 年 2 月 24 日星期日=>52, 2013 年 3 月 3 日星期日=>52, 2013 年 3 月 10 日星期日=>45, 2013 年 3 月 17 日星期日= >56,星期日,2013 年 3 月 24 日=>134,星期日,2013 年 3 月 31 日=>76,星期日,2013 年 4 月 7 日=>88,星期日,2013 年 4 月 14 日=>87,星期日,2013 年 4 月 28 日=>93,星期日, 2013 年 5 月 5 日=>93、2013 年 5 月 12 日星期日=>95、2013 年 5 月 19 日星期日=>90、2013 年 5 月 26 日星期日=>87、2013 年 6 月 2 日星期日=>71、2013 年 6 月 9 日星期日=> 86,2013 年 6 月 16 日星期日=>109,2013 年 6 月 23 日星期日=>80,2013 年 6 月 30 日星期日=>68,2013 年 7 月 7 日星期日=>75,2013 年 7 月 14 日星期日=>73}

但我的图表需要的是散列数组,形式为:

{日期:“2013 年 6 月 23 日星期日”,出席人数:80},{日期:“2013 年 6 月 30 日星期日”,出席人数:68 人}

所以我想弄清楚如何将第一种形式转换为第二种形式。

我确信这很容易,但我有限的 Rails 知识已经碰壁了。

【问题讨论】:

    标签: ruby-on-rails ruby arrays hash


    【解决方案1】:
    .collect{|key,value| {:date => key, :attendance => value} }
    

    循环并创建一个新的散列,其中原始键成为日期值,原始值成为出勤值。这些新的哈希值被收集到一个数组中。

    【讨论】:

    • 我同意。在看到肖恩的回复之前,我使用了第一个答案。我已经对此进行了重构。
    【解决方案2】:

    你可以这样想:

    h = {"Sun, 06 Jan 2013"=>66, "Sun, 13 Jan 2013"=>65, "Sun, 20 Jan 2013"=>60 }
    h.map{|k,v| Hash[:date,k,:attend,v]}
    # => [{:date=>"Sun, 06 Jan 2013", :attend=>66},
    #     {:date=>"Sun, 13 Jan 2013", :attend=>65},
    #     {:date=>"Sun, 20 Jan 2013", :attend=>60}]
    

    【讨论】:

    • @NielsB。使它可读... :) 准备好迎接所有挑战.. :)))
    • 这样更好,但我还是更喜欢 Shawns 的回答,因为它读起来很好,只需要你知道 collect/map 方法。您的示例还要求您了解 Hash 类中的反直觉 [] 类方法。
    • @NielsB。我没有问题...我喜欢我的那个,我使用Kernel#Hash 而不是{}.. 简单.. :))) 但是感谢您发表评论.. :) 我喜欢反馈...
    猜你喜欢
    • 2017-05-11
    • 2011-12-07
    • 2014-10-29
    • 1970-01-01
    • 2012-10-29
    • 2019-10-27
    • 2019-05-23
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多