[#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: masta Blasta <lists@...>
Date: 2013-06-17 19:56:48 UTC
List: ruby-talk #408295
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 = [
>>> [ 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 = 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 separate
> arrays and sorting them side-by-side (which can easily go wrong), you
> could simply connect the pairs into their own arrays all inside another
> 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 its
> 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 = arr.sort_by { |object, otherobject| object.id }
>
> This does the same thing, but with the second object's id:
>
> arr = 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 other 
is re-ordered.

Originally only one of the arrays was properly sorted, and the other had 
then to be ordered to match.

Here is some better sample data:
terms = [
    {:id=>3, :name=>"term1", :version=>2},
    {:id=>4, :name=>"term2", :version=>2},
    {:id=>8, :name=>"term3", :version=>1}
]

arr2 = [
    {:term_id=>4, :name=>"assoc1"},
    {:term_id=>8, :name=>"assoc2"},
    {:term_id=>3, :name=>"assoc3"}
]

so 'terms' is properly sorted, and now we want arr2 to follow that 
order. So after our operation arr2 should look like:

arr2 = [
    {:term_id=>3, :name=>"assoc3"},
    {:term_id=>4, :name=>"assoc1"},
    {:term_id=>8, :name=>"assoc2"}

]

These are ActiveRecord objects. A SQL solution is possible but the query 
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.

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

In This Thread