Rails を使用しているか、Rails を含めている場合は、次のようactive_support
に使用できます。group_by
analysis_response.histories.group_by(&:month)
月のタイプに応じて、次のようなハッシュが得られます。
{
:jan => [<history>, <history>],
:feb => [<history>],
...
:dec => [<history>, <history>]
}
リスク別にグループ化するには、次のようにします。
risk_levels = [:low, :medium, :high]
analysis_response.histories.compact.group_by do |month, history|
risk_levels[get_risk(history.probability, history.consequence)]
end
次のようなハッシュになります。
{
:low => [<history>, <history>],
:medium => [<history>, <history>],
:high => [<history>, <history>]
}
また、月ごとにリスク レベルをグループ化しようとしている場合は、次のようにします。
grouped_histories = {}
risk_levels = [:low, :medium, :high]
analysis_response.histories.group_by(&:month).each_pair do |month, histories|
risk_histories = histories.compact.group_by do |history|
risk_levels[get_risk(history.probability, history.consequence)]
end
risk_histories.each_pair do |risk, history_list|
grouped_histories[:month][risk] = history_list.size
end
end
あなたにこれを与える:
{
:jan => {
:low => 1,
:medium => 2
:high => 0
},
:feb => {
:low => ...you get the idea
}
}