ruby-on-rails - Rails 数组 group_by

标签 ruby-on-rails arrays ruby

我有一个来自数据库查询的动态对象结果数组。

USERNAME   choice_indx   legend
USER1        3             4
USER2        0             4
USER3        0             4
USER1        9             2
USER2        9             2
USER3        8             2
USER1        3             1
USER2        9             1
USER3        8             1

查询:

SELECT survey_answers.anonymous_user_id, survey_answers.choice_index, survey_questions.legend 
  FROM `survey_answers` 
  LEFT JOIN surveys ON surveys.id = survey_answers.survey_id 
  LEFT JOIN survey_questions ON survey_questions.id = survey_answers.survey_question_id 
  WHERE (survey_questions.legend IN (1,2,4)) AND (survey_answers.track_id =2) AND (survey_answers.survey_id =2) AND (surveys.survey_type =2)

如何按用户对其进行分组并得到如下结果:

final_array = {
  "USER1" => [[3,4],[9,2],[3,1]], 
  "USER2" => [[0,4],[9,2],[9,1]],
  "USER3" => [[0,4],[8,2],[8,1]]
}

我尝试在rails中使用group_by,但结果与我想要的不一样。有人可以帮我吗?谢谢。

最佳答案

假设 objects 是具有 anonymous_user_idchoice_indexlegend 属性的 ActiveModel 对象的 Enumerable,这将做你想做的事:

objects.map {|obj| obj.values_at(:anonymous_user_id, :choice_index, :legend) }
  .group_by(&:shift)

如果您在 ActiveRecord 查询中使用 pluck,则可以跳过 map,例如:

MyModel.where(...)
  .pluck(:anonymous_user_id, :choice_index, :legend)
  .group_by(&:shift)

编辑

回复您的评论,是的,虽然它不太干净:

MyModel.where(...)
  .pluck(:anonymous_user_id, :choice_index, :legend)
  .map {|vals| Hash[ %w[ __key__ c_idx legend ].zip(vals) ] }
  .group_by {|hsh| hsh.delete("__key__") }

或者:

MyModel.where(...)
  .pluck(:anonymous_user_id, :choice_index, :legend)
  .each_with_object(Hash.new {|h,k| h[k] = [] }) do |(key, c_idx, legend), hsh| 
    hsh[key] << { "c_idx" => c_idx, "legend" => legend }
  end

关于ruby-on-rails - Rails 数组 group_by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33991179/

相关文章:

css - 没有将 nil 隐式转换为 String

javascript - 如何使用 lodash 合并/连接对象数组中相同对象属性的值?

ruby-on-rails - 乘客未在 80 端口启动

ruby - DataMapper 一对多删除失败

javascript - 我无法让我的标题显示在我的灯箱中

ruby-on-rails - "Export"Ruby 中的 x509 证书

ruby-on-rails - 命名空间路由的默认资源?

ruby-on-rails - Haml:如何生成动态ID

java - 为什么模数不能帮助找到负奇数?

python - 将 numpy 数组 append 到列表 - 奇怪的事情