gpt4 book ai didi

ruby - 在 Ruby 中创建一个线性嵌套哈希? (我来自 Perl)

转载 作者:数据小太阳 更新时间:2023-10-29 06:27:00 24 4
gpt4 key购买 nike

我是一个 Perl 的人,我已经做了一段时间这样的哈希:

my %date;#Assume the scalars are called with 'my' earlier$date{$month}{$day}{$hours}{$min}{$sec}++

现在我正在学习 Ruby,到目前为止我发现使用这棵树是做很多键和一个值的方法。有什么方法可以只用一行来使用我在 Perl 中使用的简单格式吗?

 @date = {                                                                                                                                                                              month => {                                                                                                                                                                           day => {                                                                                                                                                                            hours => {                                                                                                                                                                            min => {                                                                                                                                                                             sec => 1                                                                                                                                                                         }                                                                                                                                                                                }                                                                                                                                                                                }                                                                                                                                                                                }                                                                                                                                                                                                                                                                                                                                                           }                   

最佳答案

不幸的是,没有简单实用的方法。一个 Ruby 等价物将是一个丑陋、丑陋的野兽,例如:

((((@date[month] ||= {})[day] ||= {})[hours] ||= {})[min] ||= {})[sec] = 1

不过,有一种方法可以为散列中缺失的键分配默认值:

@date = Hash.new { |hash, key| hash[key] = {} }

# @date[:month] is set to a new, empty hash because the key is missing.
@date[:month][:day] = 1

不幸的是,这不能递归地工作。

...除非您自己创建; Ruby 万岁!

class Hash
def self.recursive
new { |hash, key| hash[key] = recursive }
end
end

@date = Hash.recursive
@date[month][day][hours][min][sec] = 1
# @date now equals {month=>{day=>{hours=>{min=>{sec=>1}}}}}

但请记住,所有未设置的值现在都是 {} 而不是 nil

关于ruby - 在 Ruby 中创建一个线性嵌套哈希? (我来自 Perl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3338979/

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