如何用map方法替换方法?红宝石

时间:2013-11-14 09:42:46

标签: ruby ruby-on-rails-4

我有一些方法应该用map方法替换。这对我来说是个问题。伙计们,你能帮助我吗?

这是我的方法:

def groupe_company_files(source_files)
      files = {}
      source_files.each do |file|
        category_name = file.company_files_category.present? file.company_files_category.name : I18n.t('company_files_categories.uncategorized')

        files[category_name] ||= []
        files[category_name] << file
      end
      files
end

1 个答案:

答案 0 :(得分:1)

使用map

def groupe_company_files(source_files)
      files = Hash.new{[]}
      source_files.map{|f| files[f.company_files_category.try(:name) || I18n.t('company_files_categories.uncategorized')] += [f]}
      files  
end

使用inject

def groupe_company_files(source_files)
      source_files.inject(Hash.new{[]}){|h,f| h[f.company_files_category.try(:name) || I18n.t('company_files_categories.uncategorized')] += [f];h}
end

使用group_by

def groupe_company_files(source_files)
      source_files.group_by{|f| f.company_files_category.try(:name) || I18n.t('company_files_categories.uncategorized')}
end