在Ruby上按照相同的条件对两个哈希数组进行排序

时间:2015-06-27 20:23:33

标签: arrays ruby sorting hash

我正在使用两个类似哈希的数组来处理Ruby:

a = [{'name'=> 'Ana', 'age'=> 42 },
     {'name'=> 'Oscar', 'age'=> 22 },
     {'name'=> 'Dany', 'age'=> 12 }]

b = [{'name'=> 'Dany', 'country'=> 'Canada' },
     {'name'=> 'Oscar', 'country'=> 'Peru'},
     {'name'=> 'Ana', 'country'=>'France'}]

我按照这样排序:

a.sort_by!{|c| c['name']}
b.sort_by!{|c| c['name']}

并且它有效,但由于我在两个阵列上做同样的事情,我想做同样但在一行;我的意思是,一次对两个数组进行排序。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

把它们放在一个数组中。

a = [{'name'=> 'Ana', 'age'=> 42 },
     {'name'=> 'Oscar', 'age'=> 22 },
     {'name'=> 'Dany', 'age'=> 12 }]

b = [{'name'=> 'Dany', 'country'=> 'Canada' },
     {'name'=> 'Oscar', 'country'=> 'Peru'},
     {'name'=> 'Ana', 'country'=>'France'}]

[a, b].each{|ar| ar.sort_by!{|c| c['name']}}
p b # => [{"name"=>"Ana", "country"=>"France"}, {"name"=>"Dany", "country"=>"Canada"}, {"name"=>"Oscar", "country"=>"Peru"}]

答案 1 :(得分:0)

更简单的方式 -

  a.zip(b).flatten.sort_by!{|c| c['name']})