2015-11-24 235 views
3

身份如何Ruby的group_by()方法组通过其元素的身份(或者更确切地说self)的阵列? (?2.2+)组通过在红宝石

a = 'abccac'.chars 
# => ["a", "b", "c", "c", "a", "c"] 

a.group_by(&:???) 
# should produce... 
# { "a" => ["a", "a"], 
# "b" => ["b"], 
# "c" => ["c", "c", "c"] } 
+0

发现了一个旧的但类似的问题,http://stackoverflow.com/q/16932711/846163 – sschmeck

回答

9

在一个新的Ruby,

a.group_by(&:itself) 

在一老一,你仍然需要做a.group_by { |x| x }

+2

谢谢,这里是[Object#本身()]的文档链接(http://ruby-doc.org /core-2.2.0/Object.html#method-i-itself)。顺便说一下,我用'&:to_s'来提供上面的例子。 – sschmeck

1

也许,这将帮助:

a = 'abccac'.chars 
a.group_by(&:to_s) 
#=> {"a"=>["a", "a"], "b"=>["b"], "c"=>["c", "c", "c"]} 

或者,下面也将工作:

a = 'abccac'.chars 
a.group_by(&:dup) 
#=> {"a"=>["a", "a"], "b"=>["b"], "c"=>["c", "c", "c"]} 
+0

谢谢,这是我的工作。 ;-) – sschmeck