gpt4 book ai didi

ruby-on-rails - Ruby:在转换数组中的对象后传递键/值

转载 作者:数据小太阳 更新时间:2023-10-29 07:04:58 24 4
gpt4 key购买 nike

给定数据:

data = [
{"id":14, "sort":1, "content":"9", foo: "2022"},
{"id":14, "sort":4, "content":"5", foo: "2022"},
{"id":14, "sort":2, "content":"1", foo: "2022"},
{"id":14, "sort":3, "content":"0", foo: "2022"},
{"id":15, "sort":4, "content":"4", foo: "2888"},
{"id":15, "sort":2, "content":"1", foo: "2888"},
{"id":15, "sort":1, "content":"3", foo: "2888"},
{"id":15, "sort":3, "content":"3", foo: "2888"},
{"id":16, "sort":1, "content":"8", foo: "3112"},
{"id":16, "sort":3, "content":"4", foo: "3112"},
{"id":16, "sort":2, "content":"4", foo: "3112"},
{"id":16, "sort":4, "content":"9", foo: "3112"}
]

通过它们的 sortids 将内容连接起来:

formatted = data.group_by { |d| d[:id]}.transform_values do |value_array|
value_array.sort_by { |b| b[:sort] }
.map { |c| c[:content] }.join
end

puts formatted
#=> {14=>"9105", 15=>"3134", 16=>"8449"}

我知道 foo 存在于 value_array 中,但想知道如何将 foo 包含在 formatted 中变量,以便我可以通过它进行映射以获得所需的输出,或者如果可能的话?

期望的输出:

[
{"id":14, "concated_value":"9105", foo: "2022"},
{"id":15, "concated_value":"3134", foo: "2888"},
{"id":16, "concated_value":"8449", foo: "3112"}
]

最佳答案

因为 :foo 对于 :id 是唯一的。您可以按如下方式执行此操作:

data.group_by {|h| h[:id]}.map do |_,sa| 
sa.map(&:dup).sort_by {|h| h.delete(:sort) }.reduce do |m,h|
m.merge(h) {|key,old,new| key == :content ? old + new : old }
end.tap {|h| h[:concated_value] = h.delete(:content) }
end
#=> [
# {"id":14, foo: "2022", "concated_value":"9105"},
# {"id":15, foo: "2888", "concated_value":"3134"},
# {"id":16, foo: "3112", "concated_value":"8449"}
# ]
  • 首先我们按 id 分组。 group_by {|h| h[:id]}
  • 然后我们复制组中的哈希值(以免破坏原始值)。 map (&:dup)
  • 然后我们逐个排序,同时删除。 .sort_by {|h| h.delete(:排序)
  • 然后我们将这些组合并在一起并仅连接内容键。m.merge(h) {|key,old,new|关键==:内容?旧 + 新:旧
  • 然后我们只需将 content 的键更改为 concated_value tap {|h| h[:concated_value] = h.delete(:content) }

关于ruby-on-rails - Ruby:在转换数组中的对象后传递键/值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51330262/

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