我如何计算Ruby中字符串数组中的字符总数?假设我有以下内容:
array = ['peter' , 'romeo' , 'bananas', 'pijamas']
我正在尝试:
array.each do |counting|
puts counting.count "array[]"
end
但是,我没有得到理想的结果。看来我正在计算角色以外的东西。
我搜索了count属性,但我没有运气或找到了很好的信息来源。基本上,我想获得数组中字符总数的输出。
答案 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