【发布时间】:2011-01-14 15:09:46
【问题描述】:
我想知道在 ruby 1.9 中是否有更规范的方法来做到这一点
我有一个包含一堆对象的数组,我想使用数组中每个对象的属性将它们分组为一个哈希。
非常简化示例:
> sh = {}
=> {}
> aers = %w(a b c d ab bc de abc)
=> ["a", "b", "c", "d", "ab", "bc", "de", "abc"]
> aers.each do |aer|
> sh[aer.size] = [] if sh[aer.size].nil?
> sh[aer.size] << aer
> end
=> ["a", "b", "c", "d", "ab", "bc", "de", "abc"]
> sh
=> {1=>["a", "b", "c", "d"], 2=>["ab", "bc", "de"], 3=>["abc"]}
我试过这个,但它的输出是错误的(如你所见):
sh = Hash.new([])
=> {}
> aers.each do |aer|
> sh[aer.size] << aer
> end
=> ["a", "b", "c", "d", "ab", "bc", "de", "abc"]
> sh
=> {}
【问题讨论】:
-
您的代码未按预期工作的原因在此处解释:stackoverflow.com/questions/2698460/… 和此处:stackoverflow.com/questions/2552579/…(Ruby 中很常见的陷阱)。