我习惯于在 PHP 中使用多维数组,我可以在其中分配和初始化散列
I am so used to work in PHP with multi-dimensional arrays, where I can assign and initialize a hash by
unset($a); // just to show that there is no variable $a
$a['settings']['system']['memory'] = '1 Gb';
$a['settings']['system']['disk space'] = '100 Gb';
有没有办法在 Ruby 中做类似的事情?或者我需要先初始化所有维度,然后再赋值.是否可以定义一个高级哈希来执行我需要的操作?你会怎么做?
Is there a way to do similar thing in Ruby? Or I need to initialize all dimensions first, and then to assign values. Is it possible to define an advanced Hash which will allow to do what I need? How would you do that?
更新
除了Douglas提出的解决方案(见下文),我还找到了一个该主题的线程,其中 Brian Schröäer 提出了 Hash 类的扩展:
In addition to the solution proposed by Douglas (see below), I have found a thread on the subject, in which Brian Schröäer has proposed an extension for the Hash class:
class AutoHash < Hash
def initialize(*args)
super()
@update, @update_index = args[0][:update], args[0][:update_key] unless args.empty?
end
def [](k)
if self.has_key?k
super(k)
else
AutoHash.new(:update => self, :update_key => k)
end
end
def []=(k, v)
@update[@update_index] = self if @update and @update_index
super
end
end
它可以解决在仅请求项目值时意外创建丢失的哈希项目时的问题,例如a['key'].
It allows to solve the problem when a missing hash item is undesirably created when the item value was only requested, e.g. a['key'].
一些额外的参考资料
试试这个:
def hash_with_default_hash
Hash.new { |hash, key| hash[key] = hash_with_default_hash }
end
a = hash_with_default_hash
如果键不存在,则块的结果将用作默认值.在这种情况下,默认值也是一个散列,它使用散列作为其默认值.
If the key doesn't exist, then the result of the block will be used as the default value. In this case, the default value is also a hash which uses hashes as its default values.
这篇关于在 Ruby 中是否可以像在 PHP 中那样自动初始化多维哈希数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
在 SELECT(MYSQL/PHP) 中加入 2 个表Joining 2 tables in SELECT(MYSQL/PHP)(在 SELECT(MYSQL/PHP) 中加入 2 个表)
如何使<option selected=“selected">由How to make lt;option selected=quot;selectedquot;gt; set by MySQL and PHP?(如何使lt;option selected=“selectedgt;由 MySQL 和 PHP 设置?)
使用 PHP 中的数组自动填充选择框Auto populate a select box using an array in PHP(使用 PHP 中的数组自动填充选择框)
PHP SQL SELECT where like search item with multiple wordsPHP SQL SELECT where like search item with multiple words(PHP SQL SELECT where like search item with multiple words)
json_encode 从 MSSQL-SELECT 产生 JSON_ERROR_UTF8json_encode produce JSON_ERROR_UTF8 from MSSQL-SELECT(json_encode 从 MSSQL-SELECT 产生 JSON_ERROR_UTF8)
MySQL ORDER BY rand(),名称 ASCMySQL ORDER BY rand(), name ASC(MySQL ORDER BY rand(),名称 ASC)