Rails 4:Group_by有2个变量

时间:2016-06-03 23:12:56

标签: ruby-on-rails enumeration

我有一个数组,代表商店的营业时间,并存储为:

schedule = [ [[mon_open, 9],   [mon_close, 5]], 
             [[tues_open, 11], [tues_close, 7]],
             [[wed_open, 9],   [wed_close, 5]],
             [[thur_open,9],   [thur_close, 5]], 
             [[fri_open, 11],  [fri_close, 7]] ]

在这种情况下,我想对数组进行分组,以便在上面的示例中[[mon_open, 9],[mon_close, 5]][[wed_open, 9],[wed_close, 5]][[thur_open,9],[thur_close, 5]]组合在一起......

和类似的[[tues_open, 11],[tues_close, 7]][[fri_open, 11],[fri_close, 7]]将组合在一起。

基本上我想用一周的开始和结束时间对一周中的几天进行分组。这可以简单地完成吗?

1 个答案:

答案 0 :(得分:1)

按工作分组的方式是选择要用于键的内容,例如像这样的东西应该做你想要的。

这里的块只返回你枚举的两个元素数组中每个元素中最后一个元素的数组(我将“mon_open”等转换为符号,你也可以使用字符串。

schedule = [ [[:mon_open, 9],   [:mon_close, 5]], 
             [[:tues_open, 11], [:tues_close, 7]],
             [[:wed_open, 9],   [:wed_close, 5]],
             [[:thur_open,9],   [:thur_close, 5]], 
             [[:fri_open, 11],  [:fri_close, 7]] ]


grouped = schedule.group_by { |i| [i[0].last, i[1].last]}
puts grouped

你得到的是这个

{[9, 5]=>[[[:mon_open, 9], [:mon_close, 5]], [[:wed_open, 9], [:wed_close, 5]], [[:thur_open, 9], [:thur_close, 5]]], [11, 7]=>[[[:tues_open, 11], [:tues_close, 7]], [[:fri_open, 11], [:fri_close, 7]]]}