2016-08-26 7 views
1

ユーザ入力に基づいてgroup_byパラメータを変更したい。 例: データは、どの私はグループに行きます:RubyまたはRuby on Rails動的に変化するパラメータのgroup_by

result = [{"result_1"=>"01","result_2"=>"August","result_3"=>"2016","result_4"=>264},{"result_1"=>"02","result_2"=>"August","result_3"=>"2016","result_4"=>49},{"result_1"=>"03","result_2"=>"August","result_3"=>"2016","result_4"=>53}] 

私はルビーのGROUP_BYは、複数のパラメータをどのように動作するかを知っています。 result_1とresult_2.ItにGROUP_BYする

は、この方法を行うことができます。コードグループの上

result.group_by{|h| [h["result_1"],h["result_2"]} 

result_1とresult_2.Hereに基づいて、データをパラメータがhard_codedされています。 私は私がとほぼそれをやりたい

result.group_by{|h| [h["result_3"],h["result_4"]]} 

のようにGROUP_BYたいパラメータ渡さdynamically.Asに基づいて

dynamic_parameter = ["result_3","result_4"] 

をGROUP_BYたい:

dynamic_parameters.each do |parameter| 
    result.group_by{|h| [h[parameters]} 
end 

またはそれに類似しました:

result.group_by{|h| [h[parameters[0]],h[parameters[1]]} 

これらのresult_3およびresult_4パラメータは、dynamic_parameter配列値に基づいています。

注:Group_byは配列要素によって異なるはずです。

答えて

2

私が正しくあなたの質問を理解していれば、このような何かが仕事をするだろう:

result.group_by do |h| 
    dynamic_parameters.map{ |p| h[p] } 
end 

またはワンライナー:

result.group_by { |h| h.values_at(*dynamic_parameters) } 
+0

が、これはこれを簡単に行うことができるとは思わなかったyou.Iありがとう、 – ashr81

+1

@ ashr81 Ruby Worldへようこそ:) –

関連する問題