2015-06-27 55 views
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.sort_by!{|c| c['name']} 
b.sort_by!{|c| c['name']} 

和它作品,但由于我在两个阵列上都做了同样的事情,我想在同一行中做同样的事情;我的意思是,一次对两个数组进行排序。

我该怎么办?

+0

这是_TWO独立arrays_,为什么你期望它有可能他们在同一时间进行排序? – nneonneo

+0

因为功能和标准是相同的。 –

+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"}] 
0

简单的办法 -

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

我想你误解了这个问题。 OP希望对每个数组进行排序,而不是以某种方式组合数组,然后进行排序。另外,'zip'在这里有点奇怪:'require'set'; a.zip(b).flatten.to_set == a.concat(b).flatten.to_set#=> true'。也就是说,'a.zip(b).flatten'产生与'a.concat(b).flatten'相同的数组,只是按照不同的顺序,看起来没有任何意义。另外,当数组大小不一样时,你遇到'zip'的问题。 –