Hi --
On Mon, 28 Apr 2008, PeteSalty wrote:
>
> So, we''ve got this little problem, that we know how to solve but
we
> think that there might be a better way of doing it, so here we go.
>
> We have an array of number, let''s say something like
>
> [29, 34, 58, 91, 102, 107, 110, 136, 145, 154, 167, 226, 239, 240,
> 251, 261, 268, 271, 290, 305, 320, 350, 505, 521, 529, 533, 544, 583,
> 596, 598, 618, 620, 665, 687, 725, 779, 780, 795, 857, 858, 900, 1013,
> 1130, 1163, 1336, 1356, 1416, 1480, 1500, 1950, 2300, 3450, 3509,
> 4400, 5300, 7300, 7600, 14000]
>
> We need to know if the numbers are in certain ranges, so for example,
> does the array contain at least one number in the following ranges
>
> 0 to 500
> 501 to 1000
> 1001 to 5000
>
> now we think the solution is something like this (let''s say the
array
> of numbers is called values)
>
> ranges = [[0,500],[501, 1000], [1001, 5000]]
> range_found = {:0 => false, :501 => false, :1001 => false}
> current_position = 0
>
> for range in ranges
>
> while (values[current_position] < range[0] ||
> values[current_position] > range[0]) && current_position <
> values.length
> current_position = current_position + 1
> end
>
> range_found[range[0].to_sym] = current_position < values.length
>
> end
>
> Anyone have any idea on how to make this simpler?
The first thing to do is use the Range class, rather than reinventing
it :-) So maybe something like this:
ranges = [0..500, 501..1000, 1001..5000]
results = {}
values.each do |v|
results[v] = ranges.any? {|r| r.include?(v) }
end
You could also use inject to similar ends:
results = values.inject({}) {|hash, v| ranges.any? {|r| r.include?(v) } }
I"m not sure why you''re doing a #to_sym operation on the numbers.
You
can reintroduce it if you want. It seems easier just to use the
numbers.
David
--
Rails training from David A. Black and Ruby Power and Light:
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
INTRO TO RAILS June 24-27 London (Skills Matter)
See http://www.rubypal.com for details and updates!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---