2015-06-27 57 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'的問題。 –