Convert PHP code into Ruby!
RSS icon Email icon Home icon
  • array_sum

    Posted on April 5th, 2009 RubyLove 2 comments

    Returns the sum of values in an array.

    PHP

    $a = array(2, 4, 6, 8);
    echo array_sum($a);
    // => 20

    Ruby

    a_var = [2, 4, 6, 8];
    puts a_var.inject {|sum,x| sum ? sum + x : x };
    # => 20

    In the code above, the return value from the ruby code will be nil if the array used is empty. This is not exactly the same behaviour as PHP, since the array_sum() function will always return a number. We can force ruby to always return a float (or an int) too, even if the array is empty, by adding a bit of type casting to the final result:

    Ruby

    a_var = [];
    puts a_var.inject {|sum,x| sum ? sum + x : x }.to_f;
    # => 0.0
     

    2 responses to “array_sum”

    1. in RoR you can just use Enumerable#sum such as:

      puts [2, 4, 6, 8].sum;
      
    2. If you’re not using Ruby on Rails, you can easily just make your own .sum :)

      [code]
      class Array;
      def sum;
      inject( nil ) { |sum,x| sum ? sum+x : x };
      end;
      end
      [/code]

      The result will be the following:

      [code]
      [1,2,3].sum # => 6
      ['1','2','3'].sum # => 123
      ['a','b','c'].sum # => ‘abc’
      [['a'], ['b','c']].sum # => ['a', 'b', 'c']
      [/code]

      If you’re not sure about the type of the array and only are using it with ints, you might want to replace sum+x with sum.to_i+x.to_i

    Leave a reply