2016-11-17 4 views
1

Ich habe zwei ArraysHinzufügen von Arrays von Hashes und sortieren nach Hash-Wert

arrayOne = [{:name=>"name1", :id=>1}, {:name=>"name2", :id=>2}, {:name=>"name3", :id=>3}] 

arrayTwo = [{:name=>"name2.1", :id=>1}, {:name=>"name2.2", :id=>2}, {:name=>"name2.3", :id=>3}] 

Und ich möchte diese beiden Arrays in einem großen Array glätten und zu sortieren, so habe ich versucht, diese

@bigArray = [arrayOne, arrayTwo].flatten.sort {|a,b| a.name <=> b.name} 

dies jedoch funktioniert nicht. Ich bin neu in Schienen und bin unsicher über die oben genannten flatten.sort sollte es abgebildet werden? Gibt es einen besseren Weg, dies zu tun?

+1

definieren "funktioniert nicht" –

+0

Warum Neuzuweisung Sie 'arrayOne'? –

+1

Verwenden Sie auch 'a [: Name] <=> b [: Name]' –

Antwort

2
(arrayOne + arrayTwo).sort_by { |e| e[:name] } 
#=> [{:name=>"name2.1", :id=>1}, 
# {:name=>"name2.1", :id=>1}, 
# {:name=>"name2.2", :id=>2}, 
# {:name=>"name2.2", :id=>2}, 
# {:name=>"name2.3", :id=>3}, 
# {:name=>"name2.3", :id=>3}] 
+0

Boom! Works wird in 9 Minuten akzeptieren –

1

First off, der Ruby-Syntax Hash-Member zuzugreifen ist hash[key] statt hash.key.

Zweitens, da beide arrayOne und arrayTwo Arrays sind, können Sie einfach den Operator + auf ihnen verwenden und dann die Sortierung durchführen. Es ist nicht notwendig, ein intermediäres Array zu erstellen und dann eine Abflachung durchzuführen.

schreiben als:

bigArray = (arrayOne + arrayTwo).sort_by { |el| el[:name] } 
+0

Ich sehe, dass die Änderung der BigArray um einen [: Name] <=> b [: name] funktioniert, aber ich mag (arrayOne + arrayTwo) .sort_by {| e | e [: name]} besser in Bezug auf das Verständnis, kommt aus PHP, macht es Sinn für mich –

Verwandte Themen