Ruby 1.8: (? Besseren Weg, dies zu tun) Hash # sort nicht zurück Hash aber Array
Frage
In einigem Szenario von Ruby 1.8. Wenn ich einen Hash
# k is name, v is order
foo = { "Jim" => 1, "bar" => 1, "joe" => 2}
sorted_by_values = foo.sort {|a, b| a[1] <==> b[1]}
#sorted_by_values is an array of array, it's no longer a hash!
sorted_by_values.keys.join ','
meine Abhilfe ist ein Verfahren to_hash
für Array-Klasse zu machen.
class Array
def to_hash(&block)
Hash[*self.collect { |k, v|
[k, v]
}.flatten]
end
end
Ich kann dann wie folgt vor:
sorted_by_values.to_hash.keys.join ','
Gibt es einen besseren Weg, dies zu tun?
Lösung
Hashes sind per definitionem ungeordnet. Es kann nicht so etwas wie eine sortierte Hash sein. Ihre beste Wette ist wahrscheinlich die Schlüssel aus dem sortierten Array zu extrahieren unter Verwendung sammeln und führen Sie dann eine Verknüpfung auf dem Ergebnis
sortedByValues = foo.sort {|a, b| a[1] <==> b[1]}
sortedByValues.collect { |a| a[0] }.join ','
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow