假设我的每行都有一个带数字的文件:
0101
1010
1311
0101
1311
431
1010
431
420
Run Code Online (Sandbox Code Playgroud)
最后,我将得到一个散列,其中包含每个数字的出现次数,在这种情况下:
{0101 => 2, 1010 => 2, 1311 => 2, 431 => 2, 420 => 1}
Run Code Online (Sandbox Code Playgroud)
我该怎么做到这一点?
Chu*_*uck 11
简单的单线程,给定一个数组items:
items.inject(Hash.new(0)) {|hash, item| hash[item] += 1; hash}
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
Hash.new(0) 创建一个新的Hash,访问未定义的键返回0.
inject(foo)使用给定块迭代数组.对于第一次迭代,它通过foo,并且在进一步的迭代中,它传递最后一次迭代的返回值.
写它的另一种方法是:
hash = Hash.new(0)
items.each {|item| hash[item] += 1}
Run Code Online (Sandbox Code Playgroud)