看@mu is too short's answer to another question,我尝试了一个变体:
def anagrams(list)
h = Hash.new{ [] }
list.each_with_object(h){ |el, h| h[el.downcase.chars.sort] <<= el }
end
anagrams(['cars', 'for', 'potatoes', 'racs', 'four','scar', 'creams', 'scream'])
(盲目地假设会有一个<<=
运算符。)它有效,但Hash.new{[]}
根本不是惯用的 - 我没有找到任何例子。这有什么问题吗?
答案 0 :(得分:3)
这种代码不常用的原因是它没有在哈希中插入其返回值,因此用户需要调用Hash#[] =将对象插入哈希(这就是你的'在这里做:hash [key]&lt;&lt; = val只是hash [key] = hash [key]&lt;&lt; val)
的缩写答案 1 :(得分:0)
它是怪异的,因为它没有使用块ctor提供的内容,但是块ctor的目的是返回默认值 - 如果你选择不做任何事情使用|h, k|
,这是您的电话。