【发布时间】:2019-03-14 12:34:18
【问题描述】:
我正在尝试创建一个散列,其中包含一个键和一个与该键关联的值数组。 所以我在做这样的事情
hash = Hash.new
然后当我有钥匙时,我会这样做
hash[key] << new_thing
但如果 hash[key] 为 nil 则会失败,因此我在尝试将 new_thing 附加到数组之前添加了此语句。
hash[key] = Array.new unless hash[key]
hash[key] << new_thing
我认为我可以通过将 hash 的定义更改为来消除添加的语句
hash = Hash.new Array.new
但这不起作用,因为每个条目共享相同的数组,我真正需要的是这个
hash = Hash.new { |h,k| h[k] = Array.new }
我知道我可能正在分裂头发,但我只是好奇,“红宝石”方法是什么?
编辑: 最终我最终做的是使用 group_by。我意识到我的问题并不明显,我试图使用这种结构将具有相同属性的对象分组到一个散列中。我将其包括在内是为了鼓励其他可能发现自己出于类似目的使用类似结构的人查看group_by
["A", 1, "b", 3].group_by { |i| i.class }
=> {String=>["A", "b"], Fixnum=>[1, 3]}
【问题讨论】:
-
你上一个
default_proc版本有什么问题? -
它有效,但我想我认为它可能比添加的语句更令人困惑。我认为这一定会出现很多,并且有一些首选的方法可以做到这一点
-
什么是
hash{key]?它甚至不是有效的 Ruby 代码。 -
@sawa:一个简单的错字?
-
@sawa:鉴于
{和[在键盘上的通常位置,很明显这是一个错字。也许如果您问hash{key]是否是一个错字,您会得到更友好的回答。