Ruby / RoR中多维数组的组/过滤器子数组

问题描述 投票:3回答:1

我有一个以.pluck(:id, :title)结尾的Ruby on Rails查询,并给了我一个充满2维数组的数组,如下所示:

array = [[11145, "string1"], [11223, "string1"], [11205, "string2"], [11127, "string2"], [11080, "string3"], [11158, "string3"]]

我想按标题对ID进行分组,以获得此结果:

 [[[11145, 11223], "string1"], [[11205, 11127], "string2"], [[11080, 11158], "string3"]]

我试图直接在SQL查询中连接ID或操纵数组,但没有管理我的预期结果。

欢迎任何帮助。预先感谢。

arrays ruby multidimensional-array ruby-on-rails-5 filtering
1个回答
3
投票

快速解决方案:

array.group_by(&:last).transform_values { |e| e.map(&:first) }.to_a
  1. Enumerable#group_by
  2. Enumerable#group_by

另一个变种是:

Hash#transform_values
  1. Hash#transform_values
  2. array.each_with_object(Hash.new {|h,k| h[k] = [] }) do |obj, res| res[obj.last] << obj.first end.to_a

UPD我不知道您的查询看起来如何,但是如果您使用PG,则可以尝试使用以下结尾:

Hash#default_proc

© www.soinside.com 2019 - 2024. All rights reserved.