首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组的字符串到拼音中的多维哈希

数组的字符串到拼音中的多维哈希
EN

Stack Overflow用户
提问于 2012-01-26 17:21:12
回答 3查看 1.3K关注 0票数 4

我真的不知道标题是否正确,但问题很简单:

我有一个值和一个键。

密钥如下:

"one.two.three"

现在,我如何设置这个散列:

params['one']['two']['three'] = value

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-26 17:37:26

您可以尝试使用以下代码来完成此操作:

代码语言:javascript
复制
keys = "one.two.three".split '.' # => ["one", "two", "three"]
params = {}; value = 1; i = 0;  # i is an index of processed keys array element
keys.reduce(params) { |hash, key|
    hash[key] = if (i += 1) == keys.length
      value # assign value to the last key in keys array
    else
      hash[key] || {} # initialize hash if it is not initialized yet (won't loose already initialized hashes)
    end
}
puts params # {"one"=>{"two"=>{"three"=>1}}}
票数 1
EN

Stack Overflow用户

发布于 2012-01-26 19:56:02

使用递归:

代码语言:javascript
复制
def make_hash(keys)
  keys.empty? ? 1 : { keys.shift => make_hash(keys) }
end

puts make_hash("one.two.three".split '.')
# => {"one"=>{"two"=>{"three"=>1}}}
票数 1
EN

Stack Overflow用户

发布于 2012-01-26 20:04:16

您可以使用inject方法:

代码语言:javascript
复制
key = "one.two.three"
value = 5

arr = key.split(".").reverse
arr[1..-1].inject({arr[0] => value}){ |memo, i| {i => memo} }
# => {"one"=>{"two"=>{"three"=>5}}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9015977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档