Ich habe eine Reihe von Hashes, die ich basierend auf den :reference
Werte sortieren möchte. Einige der Elemente innerhalb des Arrays haben jedoch keinen :reference
-Schlüssel und können daher nicht sortiert werden. Gibt es eine Möglichkeit, dieses Feld zu ignorieren und nur die Hash-Elemente zu sortieren, die diesen Schlüssel enthalten?Ruby Sortierung Hashes innerhalb Array
Ich habe den folgenden Ansatz versucht, aber ich bin immer ein Argument Fehler
ArgumentError: comparison of NilClass with String failed
sort_by at org/jruby/RubyEnumerable.java:503
arr1 = [{:reference=> "F123",
:name=> "test4"
},
{
:reference=> "ZA4",
:name=> "test3"
},
{
:reference=> "A43",
:name=> "test2"
},
{
:name=> "test1"
},
{
:name=> "homework1"
}]
arr1 = arr1.sort_by { |hash| hash[:reference] }
puts arr1
Die richtige Ausgabe sollte wie folgt aussehen:
=> arr1= [
{:reference=>"A43", :name=>"test2"},
{:reference=>"F123", :name=>"test4"},
{:reference=>"ZA4", :name=>"test3"},
{:name=> "test1"},
{:name=> "homework1"}
]
Ihnen danken. Gibt es eine Möglichkeit, das Array so zu sortieren, dass die Hashes ohne die Schlüssel ': reference' auf der Rückseite des Arrays enden? – danynl
Ich habe eine Methode hinzugefügt, um diese an das Ende zu schieben, indem ein zweites Element zu ihrer Sortierung hinzugefügt wird, um sie zurück zu zwingen. Ein Array ist eine bequeme Möglichkeit, dies zu tun, da es basierend auf dem ersten Element * dann * dem zweiten Element sortiert ist. – tadman
Sie brauchen '.to_s' nicht in Ihrer letzten Zeile. Strings werden niemals mit "nil" und "nil <=> nil # => 0" verglichen. –