Search code examples
arraysrubystringaveragestring-length

How do I calculate the average length of a string in an array?


How do I calculate the average length of a string in my array? I thought I could do

2.4.0 :004 >   arr = ["a", "ab", "abc"]
 => ["a", "ab", "abc"]
...
2.4.0 :006 > arr.inject{ |sum, el| sum + el.length }.to_f / arr.size
TypeError: no implicit conversion of Integer into String
    from (irb):6:in `+'
    from (irb):6:in `block in irb_binding'
    from (irb):6:in `each'
    from (irb):6:in `inject'
    from (irb):6
    from /Users/nataliab/.rvm/gems/ruby-2.4.0/gems/railties-5.0.2/lib/rails/commands/console.rb:65:in `start'
    from /Users/nataliab/.rvm/gems/ruby-2.4.0/gems/railties-5.0.2/lib/rails/commands/console_helper.rb:9:in `start'
    from /Users/nataliab/.rvm/gems/ruby-2.4.0/gems/railties-5.0.2/lib/rails/commands/commands_tasks.rb:78:in `console'
    from /Users/nataliab/.rvm/gems/ruby-2.4.0/gems/railties-5.0.2/lib/rails/commands/commands_tasks.rb:49:in `my_command!'
    from /Users/nataliab/.rvm/gems/ruby-2.4.0/gems/railties-5.0.2/lib/rails/commands.rb:18:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

but apparently not.


Solution

  • I would write like:

    arr.join.size / arr.size.to_f
    

    Also, you can use sum since Ruby 2.4:

    arr.sum(&:size) / arr.size.to_f
    #=> 2.0