Tag: hash of hashes

在Ruby中将嵌套的哈希键从CamelCase转换为snake_case

我正在尝试构建一个API包装器gem,并且在从API返回的JSON中将哈希键转换为更多Rubyish格式时遇到问题。 JSON包含多层嵌套,包括哈希和数组。 我想要做的是递归地将所有键转换为snake_case以便于使用。 这是我到目前为止所得到的: def convert_hash_keys(value) return value if (not value.is_a?(Array) and not value.is_a?(Hash)) result = value.inject({}) do |new, (key, value)| new[to_snake_case(key.to_s).to_sym] = convert_hash_keys(value) new end result end 上面调用此方法将字符串转换为snake_case: def to_snake_case(string) string.gsub(/::/, ‘/’). gsub(/([AZ]+)([AZ][az])/,’\1_\2′). gsub(/([az\d])([AZ])/,’\1_\2′). tr(“-“, “_”). downcase end 理想情况下,结果类似于以下内容: hash = {:HashKey => {:NestedHashKey => [{:Key => “value”}]}} convert_hash_keys(hash) # => {:hash_key => {:nested_hash_key […]

Ruby递归/克隆递归

我有一个哈希: h = {‘name’ => ‘sayuj’, ‘age’ => 22, ‘project’ => {‘project_name’ => ‘abc’, ‘duration’ => ‘prq’}} 我需要一个这个哈希的副本,更改不应该影响原始哈希。 当我尝试时, d = h.dup # or d = h.clone d[‘name’] = ‘sayuj1’ d[‘project’][‘duration’] = ‘xyz’ pd #=> {“name”=>”sayuj1”, “project”=>{“duration”=>”xyz”, “project_name”=>”abc”}, “age”=>22} ph #=> {“name”=>”sayuj”, “project”=>{“duration”=>”xyz”, “project_name”=>”abc”}, “age”=>22} 在这里你可以看到project[‘duration’]在原始哈希中被更改,因为project是另一个哈希对象。 我想要递归地duped或克隆哈希。 我怎样才能做到这一点?

如果hash 不存在,如何分配hash =’c’?

有什么比这简单的方法 if hash.key?(‘a’) hash[‘a’][‘b’] = ‘c’ else hash[‘a’] = {} hash[‘a’][‘b’] = ‘c’ end