Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Ruby (http://www.velocityreviews.com/forums/f66-ruby.html)
-   -   array dynamic intersection and union (http://www.velocityreviews.com/forums/t865907-array-dynamic-intersection-and-union.html)

Jamal Soueidan 01-14-2011 09:07 PM

array dynamic intersection and union
 
Hello,

I was wondering If could intersect and union array dynamic in my code.

Let us say I have these conditions.

array = A & B | (C & D ) & E


Is their any ways of doing these stuff dynamic if all the objects was
arrays.

A = [1,2,3,4,5]


Thanks for any help.

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


Rob Biedenharn 01-14-2011 09:47 PM

Re: array dynamic intersection and union
 
On Jan 14, 2011, at 4:07 PM, Jamal Soueidan wrote:

> Hello,
>
> I was wondering If could intersect and union array dynamic in my code.
>
> Let us say I have these conditions.
>
> array = A & B | (C & D ) & E
>
>
> Is their any ways of doing these stuff dynamic if all the objects was
> arrays.
>
> A = [1,2,3,4,5]
>
>
> Thanks for any help.
>


Why don't you try a few examples and find out? If you still have
questions, then at least you can point to actual code to clarify where
you need help.

-Rob


Rob Biedenharn
Rob@AgileConsultingLLC.com http://AgileConsultingLLC.com/
rab@GaslightSoftware.com http://GaslightSoftware.com/



Jamal Soueidan 01-14-2011 10:39 PM

Re: array dynamic intersection and union
 
Hello Rob,

Sorry I did not explain myself first time.

But I let us say I have these hashes.

rule = {:array => [1,2,3,4], :condition => "AND"}
rule2 = {:array => [1,2,3,4], :condition => "OR"}
rule3 = {:array => [3,4]}

How can I intersection and union based on the conditions in the hash
through them all?

So it end up like this

array = rule[:array] & rule2[:array] | rule3[:array]

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


Rob Biedenharn 01-15-2011 12:14 AM

Re: array dynamic intersection and union
 
On Jan 14, 2011, at 5:39 PM, Jamal Soueidan wrote:

> Hello Rob,
>
> Sorry I did not explain myself first time.
>
> But I let us say I have these hashes.
>
> rule = {:array => [1,2,3,4], :condition => "AND"}
> rule2 = {:array => [1,2,3,4], :condition => "OR"}
> rule3 = {:array => [3,4]}
>
> How can I intersection and union based on the conditions in the hash
> through them all?
>
> So it end up like this
>
> array = rule[:array] & rule2[:array] | rule3[:array]


Let me rephrase that because you still aren't giving enough
information to really know what you're trying to do.

Given an array of hashes:
input = [ {:array => [1,2,3,4], :condition => "AND"},
{:array => [2,4,6,8], :condition => "OR"},
{:array => [1,3]},
]
array = input[0][:array] & input[1][:array] | input[2][:array]
=> [2, 4, 1, 3]


Well, if you apply the operations serially, you will actually get
something like:

array = ((input[0][:array] & input[1][:array]) | input[2][:array])

Since & is higher precendence than |, the answer is the same, but if
you change the order:

array = input[0][:array] | input[1][:array] & input[2][:array]
=> [1, 2, 3, 4]

is not the same as:

array = ((input[0][:array] | input[1][:array]) & input[2][:array])
=> [1, 3]


def combine(arrays)
result, op = [], "OR"
arrays.each do |hsh|
case op
when "OR"
result |= hsh[:array]
when "AND"
result &= hsh[:array]
end
op = hsh[:condition]
end
result
end

combine(input)
#=> [2, 4, 1, 3]

-Rob

Rob Biedenharn
Rob@AgileConsultingLLC.com http://AgileConsultingLLC.com/
rab@GaslightSoftware.com http://GaslightSoftware.com/




All times are GMT. The time now is 12:29 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.