From: Josh Cheek Date: 2010-03-29T23:14:41+09:00 Subject: Re: Easy task, Sum array element... Why doesn't it work? --000e0cd1aa3e4203b70482f12286 Content-Type: text/plain; charset=ISO-8859-1 On Mon, Mar 29, 2010 at 4:26 AM, Walle Wallen wrote: > I have done it many times before, but this time I can't get it too work. > I'm starting to get a bit frustrating. > So, I'm trying to sum all elements from the second element in a Array > using inject. The problem is that inject returns nil every time. What am > I doing wrong? > > parameters.each {|element| print element + ","} --> ?faq,using,rtorrent > parameters.each {|element| print element.class.to_s + ","} --> > String,String,String > parameters.class --> Array > > Doesn't work. > (parameters[1]..parameters[-1]).inject {|result, element| result + > element} --> nil > Neither does. > (parameters[1]..parameters[-1]).to_a.inject {|result, element| result + > element} --> nil > > //Walle > -- > Posted via http://www.ruby-forum.com/. > > Rails has this by default: http://api.rubyonrails.org/classes/Enumerable.html#M002571 module Enumerable def sum(identity = 0, &block) return identity unless size > 0 if block_given? map(&block).sum else inject { |sum, element| sum + element } end end end ['a','b','c'].sum # => "abc" [1,2,3].sum # => 6 [[0],['0'],[:'0'],[/0/]].sum # => [0, "0", :"0", /0/] [].sum(/abc/) # => /abc/ [1,2,3].sum(/abc/) # => 6 ['a','b','c'].sum(&:upcase) # => "ABC" That last one is 1.9 only (or another monkey patch ;P ) --000e0cd1aa3e4203b70482f12286--