8, "book_id"=>14238}, {"id"=>5, "book_id"=>14238}, {"id"=>7, "book_-6ren">
gpt4 book ai didi

ruby-on-rails - 具有哈希对的 Ruby 数组?

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:19 26 4
gpt4 key购买 nike

我有如下的 ruby​​ 数组:

array = [{"id"=>8, "book_id"=>14238}, {"id"=>5, "book_id"=>14238}, {"id"=>7, "book_id"=>10743}, {"id"=>9, "book_id"=>10743}]

我想要一个新数组,它结合了具有相同 book_idids 的结果。

预期结果:

array = [{"book_id"=>14238, "id"=>[8,5]}, {"book_id"=>10743, "id"=>[7,9]}]

最佳答案

我不能说这很容易理解,但是很简洁:

array.group_by {|item| item["book_id"] }.map do |k, v|
{ "book_id" => k, "id" => v.map {|item| item["id"] } }
end

=> [{"book_id"=>14238, "id"=>[8, 5]}, {"book_id"=>10743, "id"=>[7, 9]}]

group_by 完成的第一个转换会重新排列您的数组,以便将具有相同 book_id 的项目组合在一起:

array.group_by {|item| item["book_id"] }
=> {14238=>[{"id"=>8, "book_id"=>14238}, {"id"=>5, "book_id"=>14238}], 10743=>[{"id"=>7, "book_id"=>10743}, {"id"=>9, "book_id"=>10743}]}

第二个转换 (map) 将 group_by 生成的散列重新格式化为一个散列列表,第二个 map 将 id 收集到一个列表中。

关于ruby-on-rails - 具有哈希对的 Ruby 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27286986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com