gpt4 book ai didi

ruby - 在 ruby​​ 的哈希中,值替换并没有完全发生

转载 作者:数据小太阳 更新时间:2023-10-29 08:45:36 25 4
gpt4 key购买 nike

下面的代码片段根据散列中的类型更新值,它几乎按预期工作,但我仍然惊讶地发现 Fixnum 类型没有得到完全更新,我得到低于输出。

输出:

{ :vad_val      => "test", 
:enabled => nil,
:reg_id => nil,
:buffer_value => 54,
:direct => "test",
:direct_val => "test",
:decision => "test",
:number => 54,
:connections => nil,
:threads => 54,
:updates => nil,
:severity => 54,
:levelval => 54,
:facility => 54,
:depend => "test"
}

从 raw_data 中可以清楚地看出 reg_id 和连接是 Fixnum,所以 54 是预期的,但它仍然被 nil 取代,当类是 TrueClass 时需要设置它。这是一件非常小的事情,但作为一个新手,我无法弄清楚。

    #!/usr/bin/ruby
require 'json'

raw_data = '{"method_name":"My function","success":true,"payload":[{"Type":"SM::Mod::Elu","Properties":{"TVset":{"Type":"Array","Mutable":false,"Value":[{"Type":"SM::Mod::VirtualArea","Properties":{"vad_val":{"Type":"String","Mutable":false,"Value":"0001"},"enabled":{"Type":"TrueClass","Mutable":false,"Value":true}},"Children":{"Music":{"Type":"SM::Mod::Base","Properties":{"reg_id":{"Type":"Fixnum","Mutable":true,"Value":null},"buffer_value":{"Type":"Fixnum","Mutable":true,"Value":10},"special_handling_table":{"Type":"SM::Mod::SpecialHandlingTable","Properties":{"behaviors_val":{"Type":"Hash","Mutable":false,"Value":{"1":{"Type":"Array","Mutable":false,"Value":[{"Type":"SM::Mod::Replace","Properties":{"direct":{"Type":"String","Mutable":true,"Value":"From"}},"Children":{}},{"Type":"SM::Mod::Behavior","Properties":{"direct_val":{"Type":"String","Mutable":true,"Value":"From"}},"Children":{}}],"IsActiveChange":null},"2":{"Type":"Array","Mutable":false,"Value":[{"Type":"SM::Mod::ReplaceSH","Properties":{"decision":{"Type":"String","Mutable":true,"Value":"Fromnetwork"}},"Children":{}}],"IsActiveChange":null},"3":{"Type":"Array","Mutable":false,"Value":[{"Type":"SM::Mod::DropBehavior","Properties":{"decision":{"Type":"String","Mutable":true,"Value":"Fromnetwork"}},"Children":{}}],"IsActiveChange":null},"4":{"Type":"Array","Mutable":false,"Value":[{"Type":"SM::Mod::StripHeaderres","Properties":{"decision":{"Type":"String","Mutable":true,"Value":"ToTransport"}},"Children":{}},{"Type":"SM::Mod::DropBehavior","Properties":{"decision":{"Type":"String","Mutable":true,"Value":"FromTransport"}},"Children":{}}],"IsActiveChange":null},"5":{"Type":"Array","Mutable":false,"Value":[{"Type":"SM::Mod::StripHeaderBehavior","Properties":{"decision":{"Type":"String","Mutable":true,"Value":"Tosnmp"}},"Children":{}},{"Type":"SM::Mod::DropBehavior","Properties":{"decision":{"Type":"String","Mutable":true,"Value":"FromTransport"}},"Children":{}}],"IsActiveChange":null},"6":{"Type":"Array","Mutable":false,"Value":[{"Type":"SM::Mod::ReplaceSHBehavior","Properties":{"decision":{"Type":"String","Mutable":true,"Value":"Fromconn"}},"Children":{}}],"IsActiveChange":null},"7":{"Type":"Array","Mutable":false,"Value":[{"Type":"SM::Mod::Dropfem","Properties":{"decision":{"Type":"String","Mutable":true,"Value":"FromTransport"}},"Children":{}}],"IsActiveChange":null},"8":{"Type":"Array","Mutable":false,"Value":[{"Type":"SM::Mod::Dropfem","Properties":{"decision":{"Type":"String","Mutable":true,"Value":"From"}},"Children":{}}],"IsActiveChange":null},"9":{"Type":"Array","Mutable":false,"Value":[{"Type":"SM::Mod::DropBehavior","Properties":{"decision":{"Type":"String","Mutable":true,"Value":"From"}},"Children":{}}],"IsActiveChange":null}},"IsActiveChange":null}},"Children":{}}},"Children":{}}}}],"IsActiveChange":null},"number":{"Type":"Fixnum","Mutable":false,"Value":0,"IsActiveChange":false},"connections":{"Type":"Fixnum","Mutable":true,"Value":null},"threads":{"Type":"Fixnum","Mutable":true,"Value":4},"updates":{"Type":"TrueClass","Mutable":true,"Value":null},"severity":{"Type":"Fixnum","Mutable":true,"Value":3},"levelval":{"Type":"Fixnum","Mutable":true,"Value":3},"facility":{"Type":"Fixnum","Mutable":true,"Value":3},"trace":{"Type":"smode::Depval::Fallback","Properties":{"enabled":{"Type":"TrueClass","Mutable":true,"Value":false},"depend":{"Type":"String","Mutable":false,"Value":""}},"Children":{}}},"Children":{}}],"error":""}'

def create_hash(set, result = {})
if set.class == Hash # iterate through hash
#result.compare_by_identity

set.each do |k, v|
if v.class == Hash && %w(String TrueClass Fixnum).include?((v["Type"] || ''))
result[k.to_sym] = v["Value"] # add this key's value to the output array
if v["Value"].class==String

result[k.to_sym]="test"
elsif v["Value"].class==Fixnum
result[k.to_sym]=54
else v["Value"].class==TrueClass
result[k.to_sym]=nil
end
elsif v.class == Hash || v.class == Array
result = create_hash(v, result) # check nested arrays and hashes
end
end
elsif set.class == Array
set.each do |a|
result = create_hash(a, result) # check elements of an array
end
end
result
end

val = create_hash(JSON.parse(raw_data))
p val

最佳答案

{"reg_id":{"Type":"Fixnum","Mutable":true,"Value":null}

所以在 If 语句中

v["Value"].class == Fixnum

变为 False 因为 nil.class == NilClass。所以在你的情况下你不应该这样检查:

v["Value"].class == Fixnum

但是

v["Type"] == "Fixnum"

关于ruby - 在 ruby​​ 的哈希中,值替换并没有完全发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29681873/

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