2012-05-02 5 views
0

У меня есть запрос здесь, который включает в себя несколько элементов, в результате мой мозг поднимается из моих ушей. У меня есть хэш, который заполняется символами в виде ключей и чисел как значения, хеш используется как хранилище для методов (через method_missing), так и результаты SQL Query. пример того, что он выглядит следующим образом:Рельсы, суммирующие значения в хеше, отсортированные с использованием Regex

@data = {:number_of_african_male_senior_managers => 0, :number_of_african_male_middle_managers => 2, :number_of_african_male_junior_managers => 3, :number_of_white_female_senior_managers => 5... ect} 

прогоны запросов SQL и собирает счет того, сколько мужчин африканских старших менеджеров есть и сохраняет это. теперь я пытаюсь создать общий столбец, который покажет мне, сколько старших руководителей существует в целом, независимо от пола или расы. Я думал, что-то вроде этого:

def extract_position_totals(position) 
    totals = @data.select {|k,v| k.to_s.match(/#{position}/)} 

end 

< -ПРИМЕЧАНИЕ это где я застрял этот метод не закончен

теперь моя проблема приходит выше код будет проходить через пар ключ/значение и выбрать какие из них указаны в параметрах, я собирался ввести, но как я могу суммировать значения этих ключей, когда ключи будут иметь разные имена?

так что в конце концов я хотел бы назвать что-то вроде этого: @ ee_demographics_presenter.extract_position_totals (старших) и он вернется => 5

любая помощь очень ценится. : D

ответ

1

Один лайнер с Inject:

def extract_position_totals(position) 
    @data.inject(0) { |memo, ary| ary[0] =~ /#{position}/ ? memo + ary[1] : memo } 
end 
1

Используется для получения значения сумм этих ключей, если ключи имеют другое название:

not_match_count = 0 
@data.map{|k, v| not_match_count+=v if !k.to_s.match(/#{position}/)} 
Смежные вопросы