Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby : How to sort an array of hash in a given order of a particular key

I have an array of hashes, id being one of the keys in the hashes. I want to sort the array elements according to a given order of ID values.

Suppose my array(size=5) is:

[{"id"=>1. ...}, {"id"=>4. ...}, {"id"=>9. ...}, {"id"=>2. ...}, {"id"=>7. ...}]

I want to sort the array elements such that their ids are in the following order:

[1,3,5,7,9,2,4,6,8,10]

So the expected result is:

[{'id' => 1},{'id' => 7},{'id' => 9},{'id' => 2},{'id' => 4}]
like image 321
nish Avatar asked Dec 08 '25 22:12

nish


1 Answers

Here is a solution for any custom index:

def my_index x 
  # Custom code can be added here to handle items not in the index.
  # Currently an error will be raised if item is not part of the index.
  [1,3,5,7,9,2,4,6,8,10].index(x) 
end

my_collection = [{"id"=>1}, {"id"=>4}, {"id"=>9}, {"id"=>2}, {"id"=>7}]
p my_collection.sort_by{|x| my_index x['id'] } #=> [{"id"=>1}, {"id"=>7}, {"id"=>9}, {"id"=>2}, {"id"=>4}]

Then you can format it in any way you want, maybe this is prettier:

my_index = [1,3,5,7,9,2,4,6,8,10]
my_collection.sort_by{|x| my_index.index x['id'] }
like image 65
hirolau Avatar answered Dec 11 '25 13:12

hirolau



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!