Group/filter sub-arrays Ruby/RoR 中的多维数组
Group/filter sub-arrays of a multidimensional array in Ruby/RoR
我在 Rails 上有一个 Ruby 以 .pluck(:id, :title)
结尾的查询,并给我一个充满二维数组的数组,如下所示:
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 或操作数组,但没有达到我的预期结果。
我们非常欢迎任何帮助。
提前致谢。
快速解决方案:
array.group_by(&:last).transform_values { |e| e.map(&:first) }.to_a
另一种变体是:
array.each_with_object(Hash.new {|h,k| h[k] = [] }) do |obj, res|
res[obj.last] << obj.first
end.to_a
UPD
我不知道你的查询是什么样子的,但如果你使用 PG,你可以尝试玩这个结尾的:
.group(:title).select('array_agg(id) as ids, title').map { |e| [e.title, e.ids] }
我在 Rails 上有一个 Ruby 以 .pluck(:id, :title)
结尾的查询,并给我一个充满二维数组的数组,如下所示:
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 或操作数组,但没有达到我的预期结果。
我们非常欢迎任何帮助。 提前致谢。
快速解决方案:
array.group_by(&:last).transform_values { |e| e.map(&:first) }.to_a
另一种变体是:
array.each_with_object(Hash.new {|h,k| h[k] = [] }) do |obj, res|
res[obj.last] << obj.first
end.to_a
UPD 我不知道你的查询是什么样子的,但如果你使用 PG,你可以尝试玩这个结尾的:
.group(:title).select('array_agg(id) as ids, title').map { |e| [e.title, e.ids] }