Can you plz, explain to me part of this code ?

25 views
Skip to first unread message

Abdel Latif

unread,
Apr 26, 2018, 12:12:20 PM4/26/18
to Ruby on Rails: Talk
Hi,

I found this code for sorting an array :

p ["AB_1020", "AB_950", "AB_50", "1000", "570"].partition{|x| x.to_i.zero? }
     
.flat_map{|x| x.sort_by {|x|x[/d+/]}.reverse}

ouptut

#⇒ ["AB_50", "AB_950", "AB_1020", "570", "1000"]


I know that .partition{|x| x.to_i.zero? } will create an array of arrays :
[["AB_1020", "AB_950", "AB_50"], ["1000", "570"]]


But this part .flat_map{|x| x.sort_by {|x|x[/d+/]}.reverse}

I could understand it.

Thanks.

Walter Lee Davis

unread,
Apr 26, 2018, 1:05:53 PM4/26/18
to rubyonra...@googlegroups.com
flat_map: https://apidock.com/ruby/Enumerable/flat_map

Then that passes a block, which acts on each member of the Enumerable that called flat_map. That block sorts by the numerical value of x, then reverses.

Does that help?

Walter

>
> I could understand it.
>
> Thanks.
>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/c8e2dc7d-8501-4df3-b19c-917ebded457f%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

Abdel Latif

unread,
Apr 26, 2018, 1:47:03 PM4/26/18
to Ruby on Rails: Talk
But [["AB_1020", "AB_950", "AB_50"], ["1000", "570"]] has non numerical values too.

Rob Biedenharn

unread,
Apr 26, 2018, 5:02:51 PM4/26/18
to rubyonra...@googlegroups.com

On 2018-Apr-26, at 13:47 , Abdel Latif <mlotf...@gmail.com> wrote:

But [["AB_1020", "AB_950", "AB_50"], ["1000", "570"]] has non numerical values too.

On Thursday, April 26, 2018 at 1:05:53 PM UTC-4, Walter Lee Davis wrote:

> On Apr 26, 2018, at 12:12 PM, Abdel Latif <mlotf...@gmail.com> wrote:
>
> Hi,
>
> I found this code for sorting an array :
>
> p ["AB_1020", "AB_950", "AB_50", "1000", "570"].partition{|x| x.to_i.zero? }
>       .flat_map{|x| x.sort_by {|x|x[/d+/]}.reverse}

You're missing that String#[] when given a Regexp returns the substring that matches that Regexp.

[1] pry(main)> ["AB_1020", "AB_950", "AB_50",].map {|x| x[/\d+/]}
=> ["1020", "950", "50"]
[2] pry(main)> ["AB_1020", "AB_950", "AB_50",].map {|x| x[/\d+/]}.sort
=> ["1020", "50", "950"]
[3] pry(main)> ["AB_1020", "AB_950", "AB_50",].map {|x| x[/\d+/]}.sort.reverse
=> ["950", "50", "1020"]
[4] pry(main)> ["AB_1020", "AB_950", "AB_50",].map {|x| x[/\d+/].to_i}.sort.reverse
=> [1020, 950, 50]
[5] pry(main)> ["AB_1020", "AB_950", "AB_50",].sort_by {|x| x[/\d+/].to_i}
=> ["AB_50", "AB_950", "AB_1020"]

-Rob

> ouptut
>
> #⇒ ["AB_50", "AB_950", "AB_1020", "570", "1000"]
>
>
> I know that .partition{|x| x.to_i.zero? } will create an array of arrays :
> [["AB_1020", "AB_950", "AB_50"], ["1000", "570"]]
>
>
> But this part .flat_map{|x| x.sort_by {|x|x[/d+/]}.reverse}

flat_map: https://apidock.com/ruby/Enumerable/flat_map

Then that passes a block, which acts on each member of the Enumerable that called flat_map. That block sorts by the numerical value of x, then reverses.

Does that help?

Walter

>
> I could understand it.
>
> Thanks.
>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/c8e2dc7d-8501-4df3-b19c-917ebded457f%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.


--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.

botp

unread,
Apr 27, 2018, 1:16:13 AM4/27/18
to rubyonra...@googlegroups.com
On Fri, Apr 27, 2018 at 12:12 AM, Abdel Latif <mlotf...@gmail.com> wrote:
 
But this part .flat_map{|x| x.sort_by {|x|x[/d+/]}.reverse}



​two things look suspicious:
1) /d+/​
​2) reverse

have you tried randomly rearranging your arrays first?​

​m​
any thanks,

--botp

Abdel Latif

unread,
Apr 30, 2018, 10:57:59 AM4/30/18
to rubyonra...@googlegroups.com
Thank you Rob, I appreciate your help, good explanation.

To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.

--
You received this message because you are subscribed to a topic in the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/rubyonrails-talk/C3hSRwet4tY/unsubscribe.
To unsubscribe from this group and all its topics, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/F584BA16-90B8-40DD-8C04-A92CBF336241%40gmail.com.
Reply all
Reply to author
Forward
0 new messages