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 に答える