2006 年 3 月 1 日,星期三

Rails 新特性:Enumerable#group_by 和 Array#in_groups_of

作者:marcel

通过 Changeset 3726,ActiveSupport 增加了两个小方法:Enumerable#group_byArray#in_groups_of

Enumerable#group_by 用于将一个可枚举对象按块执行结果分组收集到不同的集合中。例如,按日期分组记录非常有用。


     latest_transcripts.group_by(&:day).each do |day, transcripts| 
       p "#{day} -> #{transcripts.map(&:class) * ', '}"
     end
     "2006-03-01 -> Transcript"
     "2006-02-28 -> Transcript"
     "2006-02-27 -> Transcript, Transcript"
     "2006-02-26 -> Transcript, Transcript"

Enumerable#group_by 未来将被直接整合到 Ruby 中,目前存在于 1.9 分支。

Array#in_groups_of 允许你按指定大小的分组来迭代数组,还可以选择用指定值(默认为 nil)来填充剩余的
空位。


     %w(1 2 3 4 5 6 7).in_groups_of(3) {|g| p g}
     ["1", "2", "3"]
     ["4", "5", "6"]
     ["7", nil, nil]

你一定会喜欢块提供的优雅封装!祝你编程愉快。