gpt4 book ai didi

Ruby 在哈希数组中修改并添加一个哈希值

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

我正在尝试使用 collect! 修改哈希数组。对于每个散列,我想添加 1 个新键/值并修改不同的键/值。但是,我在使用 sub! 修改现有哈希值时遇到问题。似乎用等于子结果的单个数组条目完全替换了散列!命令

paths = [{:path=>"bin/ruby/file1", :tag=>"v_10"}, {:path=>"usr/name/subdir/file2", :tag=>"v_12"}]

paths.collect! do |x|
x.merge(Hash[:file => x[:path].sub(/.*\//,"")]) # Grab file name
x[:path].sub!(/\/\w+$/,"") # remove file name from path
end

结果:
=> ["bin/ruby", "usr/name/subdir"]

期望的结果:
=> [{:path=>"bin/ruby", :tag=>"v_10", :file=>"file1"}, {:path=>"usr/name/subdir", :tag=>"v_12", :file=>"file2"}]

最佳答案

你不需要collect!,你想要each。 Collect 将输入 HashMap 到每个 block 的输出, block 的输出是 .sub 调用的结果,这意味着您得到一个转换后的平面数组 :path 值(value)观。

您也可以直接设置键 :file 而不是构建一个新的散列并尝试合并它:

paths = [{:path=>"bin/ruby/file1", :tag=>"v_10"}, {:path=>"usr/name/subdir/file2", :tag=>"v_12"}]

paths.each do |x|
x[:file] = x[:path].sub(/.*\//, '')
x[:path].sub!(/\/\w+$/,"") # remove file name from path
end

puts paths.inspect # [{:path=>"bin/ruby", :tag=>"v_10", :file=>"file1"}, {:path=>"usr/name/subdir", :tag=>"v_12", :file=>"file2"}]

关于Ruby 在哈希数组中修改并添加一个哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21976698/

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