Hash.new {[]} - 有什么问题吗?

时间:2012-03-03 20:42:25

标签: ruby hashmap block

@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{[]}根本不是惯用的 - 我没有找到任何例子。这有什么问题吗?

2 个答案:

答案 0 :(得分:3)

这种代码不常用的原因是它没有在哈希中插入其返回值,因此用户需要调用Hash#[] =将对象插入哈希(这就是你的'在这里做:hash [key]&lt;&lt; = val只是hash [key] = hash [key]&lt;&lt; val)

的缩写

答案 1 :(得分:0)

它是怪异的,因为它没有使用块ctor提供的内容,但是块ctor的目的是返回默认值 - 如果你选择不做任何事情使用|h, k|,这是您的电话。