Ruby 1.8: (? Besseren Weg, dies zu tun) Hash # sort nicht zurück Hash aber Array

StackOverflow https://stackoverflow.com/questions/489139

  •  20-08-2019
  •  | 
  •  

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?

War es hilfreich?

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
scroll top