[#407882] Ruby extremely slow compared to PHP — Mick Jagger <lists@...>

Hello there, how are you? Hope you are fine. I am a PHP programmer

17 messages 2013/06/02

[#407908] TCPServer/Socket and Marshal problem — Panagiotis Atmatzidis <atma@...>

Hello,

18 messages 2013/06/03

[#407946] Is rubyquiz.com dead? — Alphonse 23 <lists@...>

Thread title says everything.

18 messages 2013/06/04

[#408012] Need help understanding recursion. — pedro oliva <lists@...>

Ive been reading Chris Pine's book 'Learn to Program' and its been going

11 messages 2013/06/06

[#408129] Getting Started With Development — Chamila Wijayarathna <cdwijayarathna@...>

I'm new to Ruby Development. I downloaded source from Github, but couldn't

24 messages 2013/06/11
[#408131] Re: Getting Started With Development — Per-erik Martin <lists@...> 2013/06/11

Ruby is often installed on linux, or can be easily installed with the

[#408146] Re: Getting Started With Development — "Chamila W." <lists@...> 2013/06/11

Per-erik Martin wrote in post #1112021:

[#408149] Re: Getting Started With Development — "Carlo E. Prelz" <fluido@...> 2013/06/11

Subject: Re: Getting Started With Development

[#408198] NokoGiri XML Parser — "Devender P." <lists@...>

Hi,

11 messages 2013/06/13

[#408201] trying to load a .rb file in irb — "Eric D." <lists@...>

I am trying to load a ruby program into irb and it will not load.

12 messages 2013/06/13

[#408205] Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...>

Hell Team,

18 messages 2013/06/13
[#408219] Re: Can I use Sinatra to render dynamic pages? — Nicholas Van Weerdenburg <vanweerd@...> 2013/06/14

You should be able to do this without JavaScript by using streaming.

[#408228] Re: Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...> 2013/06/14

Well, I got some good suggestions from everyone here. I thank you all for

[#408275] Compare and sort one array according to another. — masta Blasta <lists@...>

I have two arrays of objects that look something like this:

14 messages 2013/06/17

[#408276] Comparing objects — "Thom T." <lists@...>

How do I compare two objects in Ruby, considering only attributes

15 messages 2013/06/17

[#408307] getting the most out of Ruby — robin wood <lists@...>

I write a lot of scripts in Ruby, most are small simple things but some

13 messages 2013/06/18

[#408309] Creating ruby script exe — Rochit Sen <lists@...>

Hi All,

17 messages 2013/06/18

[#408357] Beginners problem with database and datamapper — cristian cristian <lists@...>

Hi all!

28 messages 2013/06/20

[#408437] How do I input a variable floating point number into Ruby Programs — "Michael P F." <lists@...>

I want to evaluate the following interactively:

10 messages 2013/06/23

[#408518] #!/usr/bin/env: No such file or directory — Todd Sterben <lists@...>

I am new to both linux and ruby. I am using Ubuntu and Ruby 1.9

17 messages 2013/06/27

[#408528] Designing a Cabinet class — Mike Vezzani <lists@...>

Hello all,

12 messages 2013/06/27

[#408561] Find elment in array of hashes — Rodrigo Lueneberg <lists@...>

array = {:id=>1, :price =>0.25} # index[0]

23 messages 2013/06/28

Re: Compare and sort one array according to another.

From: Douglas Seifert <doug@...>
Date: 2013-06-17 21:35:11 UTC
List: ruby-talk #408301
You have said that the size of your two arrays is small, so the fact that
the find_index based solution is o(n^2) probably doesn't matter.  For
kicks, a o(n) solution compared to the o(n^2) solution here:

https://gist.github.com/seifertd/5800639

It involves precomputing a lookup index for the data you need to sort.

-Doug


On Mon, Jun 17, 2013 at 1:40 PM, Jes=FAs Gabriel y Gal=E1n <
jgabrielygalan@gmail.com> wrote:

> On Mon, Jun 17, 2013 at 10:39 PM, Jes=FAs Gabriel y Gal=E1n
> <jgabrielygalan@gmail.com> wrote:
> > On Mon, Jun 17, 2013 at 9:56 PM, masta Blasta <lists@ruby-forum.com>
> wrote:
> >> Joel Pearson wrote in post #1112686:
> >>> masta Blasta wrote in post #1112677:
> >>>> Joel Pearson wrote in post #1112665:
> >>>>> If the items within each array belong to each other, how about a
> >>>>> multidimensional array?
> >>>>>
> >>>>> arr =3D [
> >>>>> [ Obj1(prop1, prop2, id), OthrObj1(prop1, prop2, ref_id) ],
> >>>>> [ Obj2(prop1, prop2, id), OthrObj2(prop1, prop2, ref_id) ],
> >>>>> [ Obj3(prop1, prop2, id), OthrObj3(prop1, prop2, ref_id) ]
> >>>>> ]
> >>>>>
> >>>>>
> >>>>> All the sorting is dealt with together then:
> >>>>>
> >>>>> sorted_arr =3D arr.sort_by { |obj1, obj2| obj1.id }
> >>>>
> >>>> I don't quite understand everything that's happening here. Can you
> >>>> elaborate a bit more on your solution.
> >>>
> >>> I'm going by your comment here:
> >>> "The objects in arr2 have a 1-1 relationship with the objects in arr1=
"
> >>>
> >>> If the objects are interlinked, rather than trying to keep two separa=
te
> >>> arrays and sorting them side-by-side (which can easily go wrong), you
> >>> could simply connect the pairs into their own arrays all inside anoth=
er
> >>> array.
> >>>
> >>> This has the benefit that once you put the pair into their own array,
> >>> they are connected without you having to worry about having to do
> >>> everything the same with array1 and array2.
> >>>
> >>> Then you can iterate through the large array like this:
> >>>
> >>> arr.each { |subarray| some_method( subarray[0], subarray[1] ) }
> >>>
> >>> In this example you can access each of the smaller arrays inside your
> >>> array. [0] is each object and [1] is each otherobject
> >>>
> >>> Or like this:
> >>>
> >>> arr.each { |object, otherobject| some_method( object, otherobject ) }
> >>>
> >>> This example is functionally the same as the previous one, but you're
> >>> using parallel assignment to place each object from the array into it=
s
> >>> own variable so it's easier to read.
> >>>
> >>> Using this approach, you can sort the larger array containing objects
> >>> and otherobjects by whatever criteria you want, and they'll stay
> >>> together as a pair within the larger array.
> >>>
> >>> This will sort each array within the parent by the first object's id:
> >>>
> >>> arr =3D arr.sort_by { |object, otherobject| object.id }
> >>>
> >>> This does the same thing, but with the second object's id:
> >>>
> >>> arr =3D arr.sort_by { |object, otherobject| otherobject.id }
> >>>
> >>> The best way to grasp how this is works is to do it in IRB and play
> >>> around with the results.
> >>
> >> I just learned something new about ordering arrays! However this doesn=
't
> >> actually solve the original problem. Your solution expects both arrays
> >> to be properly sorted, and then keeps them together if one or the othe=
r
> >> is re-ordered.
> >>
> >> Originally only one of the arrays was properly sorted, and the other h=
ad
> >> then to be ordered to match.
> >>
> >> Here is some better sample data:
> >> terms =3D [
> >>     {:id=3D>3, :name=3D>"term1", :version=3D>2},
> >>     {:id=3D>4, :name=3D>"term2", :version=3D>2},
> >>     {:id=3D>8, :name=3D>"term3", :version=3D>1}
> >> ]
> >>
> >> arr2 =3D [
> >>     {:term_id=3D>4, :name=3D>"assoc1"},
> >>     {:term_id=3D>8, :name=3D>"assoc2"},
> >>     {:term_id=3D>3, :name=3D>"assoc3"}
> >> ]
> >>
> >> so 'terms' is properly sorted, and now we want arr2 to follow that
> >> order. So after our operation arr2 should look like:
> >>
> >> arr2 =3D [
> >>     {:term_id=3D>3, :name=3D>"assoc3"},
> >>     {:term_id=3D>4, :name=3D>"assoc1"},
> >>     {:term_id=3D>8, :name=3D>"assoc2"}
> >>
> >> ]
> >>
> >> These are ActiveRecord objects. A SQL solution is possible but the que=
ry
> >> is painfully long due to complex associations. Since the arrays are
> >> usually small 3-5 records, i was hoping i could just sort them
> >> programmatically.
> >
> > Did you try Robert Klemme's solution? Translated to this new example:
> >
>
> Typo: that should have been
>
> > arr2.sort_by {|o| terms.find_index {|a| o[:term_id] =3D=3D a[:id]}}
> >
> > =3D> [{:term_id=3D>3, :name=3D>"assoc3"}, {:term_id=3D>4, :name=3D>"ass=
oc1"},
> > {:term_id=3D>8, :name=3D>"assoc2"}]
> >
> > Jesus.
>
>

In This Thread