Mat*_*iby 0 ruby arrays group-by ruby-on-rails ruby-on-rails-3
好吧,我有一个4个对象的数组,如
=> [#<Graphic id: 3...">, #<Collection id: 1....">, #<Category id:...">, #<Volume id: 15...">]
matches.size
=> 4
Run Code Online (Sandbox Code Playgroud)
有4个不同的对象(图形,集合,类别,卷)我现在需要根据对象将它们分成4个数组.所以我创建了这个方法并且它的工作原理但它是如此的hackish ....任何关于如何以更简洁的方式实现相同的东西的想法...更多rubyesk
这是我的方法
def self.get_results(matches)
graphics = [], collections = [], categories = [], sub_categories = []
matches.group_by(&:class).each do |key, group|
case group.first.class.to_s
when "Graphic"
graphics << group
when "Category"
categories << group
when "SubCategory"
sub_categories << group
when "Collection"
collections << group
end
end
[graphics.flatten, collections.flatten, categories.flatten, sub_categories.flatten]
end
Run Code Online (Sandbox Code Playgroud)
matches_by = matches.group_by {|m| m.class.to_s }
%w{Graphic Category SubCategory Collection}.map do |class_name|
matches_by[class_name] || []
end
Run Code Online (Sandbox Code Playgroud)
如果你不在乎他们的订单,试试这个
matches.group_by {|m| m.class.to_s }.values
Run Code Online (Sandbox Code Playgroud)
如果你只想要一个Hash,由类名索引(其中每个条目的值是该类型的对象数组),它只是
matches.group_by {|m| m.class.to_s }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1208 次 |
| 最近记录: |