如何计算 Ruby 中字符串数组中的字符总数?假设我有以下内容:
array = ['peter' , 'romeo' , 'bananas', 'pijamas']
我正在努力:
array.each do |counting|
puts counting.count "array[]"
end
但是,我没有得到想要的结果。看来我在数字符以外的东西。
我搜索了 count 属性,但没有任何运气或找到良好的信息来源。基本上,我想得到数组内字符总数的输出。,
如何计算 Ruby 中字符串数组中的字符总数?假设我有以下内容:
array = ['peter' , 'romeo' , 'bananas', 'pijamas']
我正在努力:
array.each do |counting|
puts counting.count "array[]"
end
但是,我没有得到想要的结果。看来我在数字符以外的东西。
我搜索了 count 属性,但没有任何运气或找到良好的信息来源。基本上,我想得到数组内字符总数的输出。,
Wing's Answer 会起作用,但只是为了好玩,这里有一些选择
['peter' , 'romeo' , 'bananas', 'pijamas'].inject(0) {|c, w| c += w.length }
或者
['peter' , 'romeo' , 'bananas', 'pijamas'].join.length
真正的问题是这string.count
不是您正在寻找的方法。(文档)
或者...
a.map(&:size).reduce(:+) # from Andrew: reduce(0, :+)
另一种选择:
['peter' , 'romeo' , 'bananas', 'pijamas'].join('').size
一个有趣的结果:)
>> 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
运行时间最低
a = ['peter' , 'romeo' , 'bananas', 'pijamas']
count = 0
a.each {|s| count += s.length}
puts count