3

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

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

我正在努力:

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

但是,我没有得到想要的结果。看来我在数字符以外的东西。

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

4

5 回答 5

9

Wing's Answer 会起作用,但只是为了好玩,这里有一些选择

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

或者

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

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

于 2013-02-22T01:20:25.593 回答
5

或者...

a.map(&:size).reduce(:+) # from Andrew: reduce(0, :+)
于 2013-02-22T01:33:23.377 回答
3

另一种选择:

['peter' , 'romeo' , 'bananas', 'pijamas'].join('').size
于 2013-02-22T01:21:41.863 回答
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运行时间最低

于 2013-02-22T02:06:09.020 回答
1
a = ['peter' , 'romeo' , 'bananas', 'pijamas']

count = 0
a.each {|s| count += s.length}
puts count
于 2013-02-22T01:16:20.910 回答