Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Contionnal sum

Reply
Thread Tools

Contionnal sum

 
 
Fernando Perez
Guest
Posts: n/a
 
      05-15-2008
Hi,

I am wondering if it is possible to create a conditionnal sum.

For instance I would like to do something like this:

@total_amount = @orders.sum { |order| order.amount if order.paid == true
}
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Phillip Gawlowski
Guest
Posts: n/a
 
      05-15-2008
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Fernando Perez wrote:
| Hi,
|
| I am wondering if it is possible to create a conditionnal sum.
|
| For instance I would like to do something like this:
|
| @total_amount = @orders.sum { |order| order.amount if order.paid == true
| }

Should be.

Something like this (untested, and unsafe, probably not even correct):

def conditional_sum order, condition
~ order.each do |o|
~ sum = sum + o unless o.paid?
~ end
~ return sum
end

I made the idea explicit, so that you should at least get the idea.

- --
Phillip Gawlowski
Twitter: twitter.com/cynicalryan
Blog: http://justarubyist.blogspot.com

You! What PLANET is this!
~ -- McCoy, "The City on the Edge of Forever", stardate 3134.0
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkgsZ9UACgkQbtAgaoJTgL8L2gCeLZyAQcn6+o +4McD7qQLJlL1o
qEUAn0JrnuPs7XVBNUYAEuCd6gUIsjBO
=k8YY
-----END PGP SIGNATURE-----

 
Reply With Quote
 
 
 
 
Xavier Noria
Guest
Posts: n/a
 
      05-15-2008
On Thu, May 15, 2008 at 6:26 PM, Fernando Perez <(E-Mail Removed)> wrote:

> I am wondering if it is possible to create a conditionnal sum.
>
> For instance I would like to do something like this:
>
> @total_amount = @orders.sum { |order| order.amount if order.paid == true
> }


sum... is that Rails? If that's the case you could filter them before:

# untested
@total_sum = @orders.select(&aid).sum(&:amount)

Although AR has another SQL-based #sum that may be worth exploring if
@orders are ARs.

That being said, perhaps you weren't aware of the fact that
Enumerable#sum is defined by Active Support, but let me point out that
those extensions are discussed in the very Rails mailing list.

-- fxn

 
Reply With Quote
 
Ken Bloom
Guest
Posts: n/a
 
      05-15-2008
Xavier Noria <(E-Mail Removed)> wrote:
> On Thu, May 15, 2008 at 6:26 PM, Fernando Perez <(E-Mail Removed)> wrote:
>
>> I am wondering if it is possible to create a conditionnal sum.
>>
>> For instance I would like to do something like this:
>>
>> @total_amount = @orders.sum { |order| order.amount if order.paid == true
>> }

>
> sum... is that Rails? If that's the case you could filter them before:
>
> # untested
> @total_sum = @orders.select(&aid).sum(&:amount)
>
> Although AR has another SQL-based #sum that may be worth exploring if
> @orders are ARs.
>
> That being said, perhaps you weren't aware of the fact that
> Enumerable#sum is defined by Active Support, but let me point out that
> those extensions are discussed in the very Rails mailing list.


Enumerable#sum is also in facets.
The .select method is a good way, but you can use less memory by doing

@orders.sum {|order| order.paid? order.amount : 0 }

Facets' #sum doesn't skip nils, so the method you proposed won't work.

--Ken

--
Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/
 
Reply With Quote
 
Simon Krahnke
Guest
Posts: n/a
 
      05-15-2008
* Fernando Perez <(E-Mail Removed)> (18:26) schrieb:

> Hi,
>
> I am wondering if it is possible to create a conditionnal sum.
>
> For instance I would like to do something like this:
>
> @total_amount = @orders.sum { |order| order.amount if order.paid == true
> }


@total_amount = @orders.inject(0) do | sum, order |
order.paid ? sum + order.amount : sum
end

or

@total_amount = @orders.select { | o | o.paid }. sum

BTW: Comparing a boolean value to true or false only shows you don't
understand booleans.

And if that order class is yours: I'd rather call the accessor »paid?«.

mfg, simon .... l
 
Reply With Quote
 
Fernando Perez
Guest
Posts: n/a
 
      05-15-2008
Thank you all for your messages. Yes it is a piece of code I am using in
a Rails app. I thought it would fit better in this list rather than the
Rails one, as the problem is not specific to Rails.

> BTW: Comparing a boolean value to true or false only shows you don't

understand booleans.

Yeah I knew someone would nail me on this. I wanted to make my problem
clear, so that's why I specified this silly "== true". In my real code,
I don't have it trust me. If I hadn't put it, someone would have come up
with "hey wtf is that order.paid thing!?"


> The .select method is a good way, but you can use less memory by doing
>
> @orders.sum {|order| order.paid? order.amount : 0 }


This is fantastic, I knew the solution was super simple. Day after day I
love Ruby more and more.

Best regards, and once again thank you very much for assisting me.

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Packet retransmits and bad check sum on ethereal capture Newbie72 Cisco 4 03-10-2006 01:52 PM
Datagrid sort & sum question ASP .Net 1 07-31-2004 12:15 PM
Calculate Running sum of 4 text boxes on client side script? Davisro ASP .Net 2 04-20-2004 08:18 PM
Javascript into ASP.Net Simple example wanted.. Sum Textboxes client side Davisro ASP .Net 4 04-10-2004 08:42 AM
DataGrid: how to have a footer row dynamically sum data Roger Moore ASP .Net 0 07-07-2003 05:27 PM



Advertisments