的group_by
方法用於這往往:
a.group_by{ |i| i }
{
"a" => [
[0] "a"
],
"d" => [
[0] "d"
],
"c" => [
[0] "c",
[1] "c",
[2] "c"
],
"b" => [
[0] "b",
[1] "b"
]
}
我喜歡:
a.group_by{ |i| i }.each_with_object({}) { |(k,v), h| h[k] = v.size }
{
"a" => 1,
"d" => 1,
"c" => 3,
"b" => 2
}
或者:
Hash[a.group_by{ |i| i }.map{ |k,v| [k, v.size] }]
{
"a" => 1,
"d" => 1,
"c" => 3,
"b" => 2
}
其中一個可能會抓撓你的癢。從那裏,你可以使用一個小測試減少的結果:
Hash[a.group_by{ |i| i }.map{ |k,v| v.size > 1 && [k, v.size] }]
{
"c" => 3,
"b" => 2
}
如果你只想打印信息的使用:
puts a.group_by{ |i| i }.map{ |k,v| "#{k}: #{v.size}" }
a: 1
d: 1
c: 3
b: 2
非常優雅! '_'代表什麼?我以前沒見過。 – 2013-03-08 00:08:16
@RichardBrown:通常意味着未使用的變量名稱。 – Linuxios 2013-03-08 00:08:53
哇!謝謝! – earlyadopter 2013-03-08 00:12:37