计算Ruby中字符串数组中的总字符数?

时间:2013-02-22 01:13:13

标签: ruby

我如何计算Ruby中字符串数组中的字符总数?假设我有以下内容:

array = ['peter' , 'romeo' , 'bananas', 'pijamas']

我正在尝试:

array.each do |counting|
   puts counting.count "array[]"
end

但是,我没有得到理想的结果。看来我正在计算角色以外的东西。

我搜索了count属性,但我没有运气或找到了很好的信息来源。基本上,我想获得数组中字符总数的输出。

5 个答案:

答案 0 :(得分:9)

Wing的答案会起作用,但只是为了好玩,这里有一些选择

['peter' , 'romeo' , 'bananas', 'pijamas'].inject(0) {|c, w| c += w.length }

['peter' , 'romeo' , 'bananas', 'pijamas'].join.length

真正的问题是string.count不是您正在寻找的方法。 (Docs

答案 1 :(得分:5)

或者...

a.map(&:size).reduce(:+) # from Andrew: reduce(0, :+)

答案 2 :(得分:2)

另一种选择:

['peter' , 'romeo' , 'bananas', 'pijamas'].join('').size

答案 3 :(得分:2)

一个有趣的结果:)

>> array = []
>> 1_000_000.times { array << 'foo' }
>> Benchmark.bmbm do |x|                                          
>>   x.report('mapreduce') { array.map(&:size).reduce(:+) }       
>>   x.report('mapsum') { array.map(&:size).sum }                 
>>   x.report('inject') { array.inject(0) { |c, w| c += w.length } }   
>>   x.report('joinsize') { array.join('').size }                   
>>   x.report('joinsize2') { array.join.size }                      
>> end

Rehearsal ---------------------------------------------
mapreduce   0.220000   0.000000   0.220000 (  0.222946)
mapsum      0.210000   0.000000   0.210000 (  0.210070)
inject      0.150000   0.000000   0.150000 (  0.158709)
joinsize    0.120000   0.000000   0.120000 (  0.116889)
joinsize2   0.070000   0.000000   0.070000 (  0.071718)
------------------------------------ total: 0.770000sec

                user     system      total        real
mapreduce   0.220000   0.000000   0.220000 (  0.228385)
mapsum      0.210000   0.000000   0.210000 (  0.207359)
inject      0.160000   0.000000   0.160000 (  0.156711)
joinsize    0.120000   0.000000   0.120000 (  0.116652)
joinsize2   0.080000   0.000000   0.080000 (  0.069612)

所以看起来array.join.size的运行时间最短

答案 4 :(得分:1)

a = ['peter' , 'romeo' , 'bananas', 'pijamas']

count = 0
a.each {|s| count += s.length}
puts count