ruby 用block来创建hash

xiaoxiao2021-02-28  114

创建hash的方式有很多种,下面用block来创建下hash, 一般不太常用,小小总结下吧:

看如下代码:

hash = Hash.new {|hash, key| hash[key] = [] } hash[:one] << "Angelababy" => {:one=>["Angelababy"]} hash[:two] << "天霸动霸tua" {:one=>["Angelababy"], :two=>["天霸动霸tua"]}

可能看上去有点懵逼,下面来解释下:

用block做参数来创建一个hash的话,在每次用Hash#[]方法来读取一个key时,如果Key找不到,会自动调用你传入的block。

具体到你的例子, hash[:one] << “Angelababy”这行代码,发生的情况如下:

1.读取hash[:one]的值 2.发现:one这个key不存在,调用block {|hash, key| hash[key] = [] }, 效果就是hash[:one] = [],然后返回hash[:one]的值,也就是一个数组 往hash[:one]这个数组中增加一个字符串”Angelababy” 于是,hash[:one] 的值,就变成了 [“Angelababy”]

转载请注明原文地址: https://www.6miu.com/read-74288.html

最新回复(0)