[#407882] Ruby extremely slow compared to PHP — Mick Jagger <lists@...>

Hello there, how are you? Hope you are fine. I am a PHP programmer

17 messages 2013/06/02

[#407908] TCPServer/Socket and Marshal problem — Panagiotis Atmatzidis <atma@...>

Hello,

18 messages 2013/06/03

[#407946] Is rubyquiz.com dead? — Alphonse 23 <lists@...>

Thread title says everything.

18 messages 2013/06/04

[#408012] Need help understanding recursion. — pedro oliva <lists@...>

Ive been reading Chris Pine's book 'Learn to Program' and its been going

11 messages 2013/06/06

[#408129] Getting Started With Development — Chamila Wijayarathna <cdwijayarathna@...>

I'm new to Ruby Development. I downloaded source from Github, but couldn't

24 messages 2013/06/11
[#408131] Re: Getting Started With Development — Per-erik Martin <lists@...> 2013/06/11

Ruby is often installed on linux, or can be easily installed with the

[#408146] Re: Getting Started With Development — "Chamila W." <lists@...> 2013/06/11

Per-erik Martin wrote in post #1112021:

[#408149] Re: Getting Started With Development — "Carlo E. Prelz" <fluido@...> 2013/06/11

Subject: Re: Getting Started With Development

[#408198] NokoGiri XML Parser — "Devender P." <lists@...>

Hi,

11 messages 2013/06/13

[#408201] trying to load a .rb file in irb — "Eric D." <lists@...>

I am trying to load a ruby program into irb and it will not load.

12 messages 2013/06/13

[#408205] Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...>

Hell Team,

18 messages 2013/06/13
[#408219] Re: Can I use Sinatra to render dynamic pages? — Nicholas Van Weerdenburg <vanweerd@...> 2013/06/14

You should be able to do this without JavaScript by using streaming.

[#408228] Re: Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...> 2013/06/14

Well, I got some good suggestions from everyone here. I thank you all for

[#408275] Compare and sort one array according to another. — masta Blasta <lists@...>

I have two arrays of objects that look something like this:

14 messages 2013/06/17

[#408276] Comparing objects — "Thom T." <lists@...>

How do I compare two objects in Ruby, considering only attributes

15 messages 2013/06/17

[#408307] getting the most out of Ruby — robin wood <lists@...>

I write a lot of scripts in Ruby, most are small simple things but some

13 messages 2013/06/18

[#408309] Creating ruby script exe — Rochit Sen <lists@...>

Hi All,

17 messages 2013/06/18

[#408357] Beginners problem with database and datamapper — cristian cristian <lists@...>

Hi all!

28 messages 2013/06/20

[#408437] How do I input a variable floating point number into Ruby Programs — "Michael P F." <lists@...>

I want to evaluate the following interactively:

10 messages 2013/06/23

[#408518] #!/usr/bin/env: No such file or directory — Todd Sterben <lists@...>

I am new to both linux and ruby. I am using Ubuntu and Ruby 1.9

17 messages 2013/06/27

[#408528] Designing a Cabinet class — Mike Vezzani <lists@...>

Hello all,

12 messages 2013/06/27

[#408561] Find elment in array of hashes — Rodrigo Lueneberg <lists@...>

array = {:id=>1, :price =>0.25} # index[0]

23 messages 2013/06/28

Re: Sum method through while loops or iteration

From: Jes俍 Gabriel y Gal疣 <jgabrielygalan@...>
Date: 2013-06-25 07:12:33 UTC
List: ruby-talk #408473
On Tue, Jun 25, 2013 at 1:33 AM, Eric D. <lists@ruby-forum.com> wrote:
> I am trying to create a sum method for an empty array, that will return
> "0" if there is nothing in it and the sum of the values if there are
> values called through it. I have seen other ways on the internet, but I
> am relatively new to this, and am under the impression that this can be
> done with while loops or .each iteration. Below are various things I
> tried, some were actual thoughts some were out of sheer frustration.
> Thanks for your help!
> 1.
> def sum (array)
>
> array = []
>
> while array >0
> array.each { |a| sum+=a }
>
> end

You cannot compare an array to an integer. array > 0 doesn't make
sense. You are probably getting this error when you run this:

2.0.0p195 :001 > a = []
 => []
2.0.0p195 :002 > a > 0
NoMethodError: undefined method `>' for []:Array
    from (irb):2

The next line is actually pretty near a solution. The only problem is
that sum in that block is just a local variable to the block, so when
you are outside of the block, you don't see it anymore. A way to fix
it is to declare the variable outside initialized to 0:

sum = 0
array.each {|a| sum += a}

The other thing you need to know is that a Ruby method will return
whatever the result of the last line is. In this case, your last line
is calling the each method, which returns the original array. You have
to return the sum, like so:

2.0.0p195 :003 > def sum
2.0.0p195 :004?>   a = [1,2,3]
2.0.0p195 :005?>   sum = 0
2.0.0p195 :006?>   a.each {|x| sum += x}
2.0.0p195 :007?>   sum
2.0.0p195 :008?>   end
 => nil
2.0.0p195 :009 > sum
 => 6

> 2.
>
> def sum
> x= []
> x.each{|element| element +element }
>
>   end

Here, the problem is that you are summing twice each element of the
array (which is not what you want), but also, you are not doing
anything with the result of that sum. What you do inside the block of
"each" is not seen from the outside of the block, unless you assign it
to a variable that can be seen outside.

> 3.
> def sum(array)
>
>   while array.length > 0
>     puts "#{array[x+y+z]}"
>   else
>     puts "0"

In this case, array.length will either always be greater than 0 or
not, since you are not modifying the array within the while loop. You
could remove the elements to decrease the length, but this is not a
very good solution for many reasons.

Here are a couple more ways to do it:

1.- More procedural style:

2.0.0p195 :012 > sum = 0
 => 0
2.0.0p195 :017 > a = [1,2,3,4]
 => [1, 2, 3, 4]
2.0.0p195 :018 > for i in 0...a.length
2.0.0p195 :019?>   sum += a[i]
2.0.0p195 :020?>   end
 => 0...4
2.0.0p195 :021 > sum
 => 10

2.- More functional styles:

2.0.0p195 :029 > a.inject(0) {|total, x| total + x}
 => 10
2.0.0p195 :030 > a.inject(:+)
 => 10


I think if you understand the first example above, using "each", you'll be good:

sum = 0
array.each {|a| sum += a}
puts sum

Hope this helps,

Jesus.

In This Thread