当前位置:  开发笔记 > 后端 > 正文

红宝石中哈希成语的哈希?

如何解决《红宝石中哈希成语的哈希?》经验,为你挑选了1个好方法。

在Ruby中创建哈希哈希允许方便的两个(或更多)维度查找.但是,插入时必须始终检查散列中是否已存在第一个索引.例如:

h = Hash.new
h['x'] = Hash.new if not h.key?('x')
h['x']['y'] = value_to_insert

最好在自动创建新哈希的情况下执行以下操作:

h = Hash.new
h['x']['y'] = value_to_insert

类似地,当查找第一个索引尚不存在的值时,如果返回nil而不是接收"[]"错误的未定义方法,则更为可取.

looked_up_value = h['w']['z']

可以创建一个具有此行为的Hash包装类,但是是否存在用于完成此任务的Ruby习惯用法?



1> Konrad Rudol..:

如果Hash.new查询的值不存在,您可以将函数传递给执行的块以产生默认值:

h = Hash.new { |h, k| h[k] = Hash.new }

当然,这可以递归地完成.

/编辑:哇,有一篇文章回答了这个问题.

为了完整起见,这里是文章中任意深度哈希的解决方案:

hash = Hash.new(&(p=lambda{|h,k| h[k] = Hash.new(&p)}))

积分从Data Noise转到肯特.


那个链接现在也死了:-(
推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有