Ruby 修改数组和散列的嵌套散列 {“8933”=> [{“id”=>419, “游戏id”=>8933, “用户id”=>1, “行”=>21, “创建时间”=>2016年11月21日星期一美国东部时间02:27:16-05:00, “更新时间”=>2016年11月21日星期一02:27:16东部标准时间-05:00}, "8690"=> [{“id”=>401, “游戏id”=>8690, “用户id”=>1, “行”=>#, “创建时间”=>2016年11月16日星期三美国东部时间21:55:59-05:00, “更新时间”=>2016年11月16日星期三美国东部时间21:55:59-05:00}
我需要保留这个精确的结构,只需将第一行的值更改/更新为20即可。它始终是我需要更新/修改的同一个位置。我尝试了一系列的方法,但都只是为了遇到语法错误或更改现有的结构。谢谢大家! 这里有一个可能的解决方案,它不修改原始数据,而是创建一个新的散列Ruby 修改数组和散列的嵌套散列 {“8933”=> [{“id”=>419, “游戏id”=>8933, “用户id”=>1, “行”=>21, “创建时间”=>2016年11月21日星期一美国东部时间02:27:16-05:00, “更新时间”=>2016年11月21日星期一02:27:16东部标准时间-05:00}, "8690"=> [{“id”=>401, “游戏id”=>8690, “用户id”=>1, “行”=>#, “创建时间”=>2016年11月16日星期三美国东部时间21:55:59-05:00, “更新时间”=>2016年11月16日星期三美国东部时间21:55:59-05:00},ruby,Ruby,我需要保留这个精确的结构,只需将第一行的值更改/更新为20即可。它始终是我需要更新/修改的同一个位置。我尝试了一系列的方法,但都只是为了遇到语法错误或更改现有的结构。谢谢大家! 这里有一个可能的解决方案,它不修改原始数据,而是创建一个新的散列 {"8933"=> [{"id"=>419, "game_id"=>8933, "user_id"=>1, "line"=>21, "created_at"=>Mon, 21 Nov
{"8933"=>
[{"id"=>419,
"game_id"=>8933,
"user_id"=>1,
"line"=>21,
"created_at"=>Mon, 21 Nov 2016 02:27:16 EST -05:00,
"updated_at"=>Mon, 21 Nov 2016 02:27:16 EST -05:00}],
"8690"=>
[{"id"=>401,
"game_id"=>8690,
"user_id"=>1,
"line"=>#<BigDecimal:7fdd42d96670,'-0.5E0',9(18)>,
"created_at"=>Wed, 16 Nov 2016 21:55:59 EST -05:00,
"updated_at"=>Wed, 16 Nov 2016 21:55:59 EST -05:00}]}
如果您确实只想修改第一次出现的行
,您可以执行以下操作:
data = {
"8933"=>
[
{
"id"=>419,
"game_id"=>8933,
"user_id"=>1,
"line"=>21,
"created_at"=>"Mon, 21 Nov 2016 02:27:16 EST -05:00",
"updated_at"=>"Mon, 21 Nov 2016 02:27:16 EST -05:00"
}
],
"8690"=>
[
{
"id"=>401,
"game_id"=>8690,
"user_id"=>1,
"line"=>-5,
"created_at"=>"Wed, 16 Nov 2016 21:55:59 EST -05:00",
"updated_at"=>"Wed, 16 Nov 2016 21:55:59 EST -05:00"
}
]
}
# Use deep_copy if you use Ruby only. Use data.deep_dup if you use Rails
def deep_copy(o)
Marshal.load(Marshal.dump(o))
end
modified_data = deep_copy(data)
modified_data.each{|n,array|
array.each{|ids|
ids["line"] = "whatever"
}
}
require 'pp'
pp modified_data
puts "-----"
pp data
# {"8933"=>
# [{"id"=>419,
# "game_id"=>8933,
# "user_id"=>1,
# "line"=>"whatever",
# "created_at"=>"Mon, 21 Nov 2016 02:27:16 EST -05:00",
# "updated_at"=>"Mon, 21 Nov 2016 02:27:16 EST -05:00"}],
# "8690"=>
# [{"id"=>401,
# "game_id"=>8690,
# "user_id"=>1,
# "line"=>"whatever",
# "created_at"=>"Wed, 16 Nov 2016 21:55:59 EST -05:00",
# "updated_at"=>"Wed, 16 Nov 2016 21:55:59 EST -05:00"}]}
# -----
# {"8933"=>
# [{"id"=>419,
# "game_id"=>8933,
# "user_id"=>1,
# "line"=>21,
# "created_at"=>"Mon, 21 Nov 2016 02:27:16 EST -05:00",
# "updated_at"=>"Mon, 21 Nov 2016 02:27:16 EST -05:00"}],
# "8690"=>
# [{"id"=>401,
# "game_id"=>8690,
# "user_id"=>1,
# "line"=>-5,
# "created_at"=>"Wed, 16 Nov 2016 21:55:59 EST -05:00",
# "updated_at"=>"Wed, 16 Nov 2016 21:55:59 EST -05:00"}]}
data.values.first.first["line"] = "whatever"