变更集 3726 向 ActiveSupport 中添加了两种简单的方法:Enumerable#group_by
和 @ Array#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]
您必须喜爱块带来的优雅封装!让步。