Forum: Ruby on Rails split dates array with take_while does not work ?

Posted by Serguei Cambour (javix)
on 2013-02-11 15:35
(Received via mailing list)
I wonder why ruby core method 'take_while' does not work as expected in 
the
below Rails console example:

irb(main):003:0> arr = []
=> []
irb(main):004:0> arr << Date.today - 15.days
=> [Sun, 27 Jan 2013]
irb(main):005:0> arr << Date.today - 25.days
=> [Sun, 27 Jan 2013, Thu, 17 Jan 2013]
irb(main):006:0> arr << Date.today
=> [Sun, 27 Jan 2013, Thu, 17 Jan 2013, Mon, 11 Feb 2013]
irb(main):007:0> arr << Date.today + 10.days
=> [Sun, 27 Jan 2013, Thu, 17 Jan 2013, Mon, 11 Feb 2013, Thu, 21 Feb 
2013]
irb(main):008:0> arr << Date.today + 25.days
=> [Sun, 27 Jan 2013, Thu, 17 Jan 2013, Mon, 11 Feb 2013, Thu, 21 Feb 
2013,
Fri, 08 Mar 2013]
irb(main):009:0> arr << Date.today + 35.days
=> [Sun, 27 Jan 2013, Thu, 17 Jan 2013, Mon, 11 Feb 2013, Thu, 21 Feb 
2013,
Fri, 08 Mar 2013, Mon, 18 Mar 2013]
irb(main):010:0> arr.size
=> 6
irb(main):011:0> jan = arr.take_while {|d| d.month == 1 }
=> [Sun, 27 Jan 2013, Thu, 17 Jan 2013]
irb(main):012:0> feb = arr.take_while {|d| d.month == 2 }
=> []
So, as you see, the first array that should contain January date only
worked fine, but not the second one, or February dates; Any idea?
Thanks and regards
Posted by Jordon Bedwell (Guest)
on 2013-02-11 15:48
(Received via mailing list)
On Mon, Feb 11, 2013 at 8:33 AM, Javix <s.cambour@gmail.com> wrote:
> I wonder why ruby core method 'take_while' does not work as expected in the
> below Rails console example:
>
> irb(main):003:0> arr = []
> => []

Enumerable#take_while short-circuits on nil or false, hence the while
in it's name.  Use Enumerable#select
Posted by Serguei Cambour (javix)
on 2013-02-11 16:17
(Received via mailing list)
On Monday, February 11, 2013 3:46:46 PM UTC+1, Jordon Bedwell wrote:
> Yep, exact, 'select' works as needed. By the way, is there a way (I find
no method neither in Rails API for Array nor in Ruby core library, to 
split
an array in sub-arrays by month ?
 Thanks
Posted by Jordon Bedwell (Guest)
on 2013-02-11 16:22
(Received via mailing list)
On Mon, Feb 11, 2013 at 9:15 AM, Javix <s.cambour@gmail.com> wrote:
>> > => []
>>
> Yep, exact, 'select' works as needed. By the way, is there a way (I find no
> method neither in Rails API for Array nor in Ruby core library, to split an
> array in sub-arrays by month ?

date_array.chunk { |v| v.month }.map { |v| v.last }
Posted by Jordon Bedwell (Guest)
on 2013-02-11 16:26
(Received via mailing list)
On Mon, Feb 11, 2013 at 9:20 AM, Jordon Bedwell <envygeeks@gmail.com> 
wrote:
>> Yep, exact, 'select' works as needed. By the way, is there a way (I find no
>> method neither in Rails API for Array nor in Ruby core library, to split an
>> array in sub-arrays by month ?
>
> date_array.chunk { |v| v.month }.map { |v| v.last }

You can also use group_by to turn it into a hash with the month as the 
key.
Posted by Serguei Cambour (javix)
on 2013-02-11 16:26
(Received via mailing list)
On Monday, February 11, 2013 4:20:56 PM UTC+1, Jordon Bedwell wrote:
> >> > the
>
> Thank ou again, it worked. I fiund another way to do that with group_by
method:

arr.group_by(&:month)

the only difference will be that the result will be a hash and not an 
array.

Regards
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.