Mein Eingabe-Hash: h = { "a" => 20, "b" => 30, "c" => 10 }
Aufsteigende Sorte: h.sort {|a,b| a[1]<=>b[1]} #=> [["c", 10], ["a", 20], ["b", 30]]
Aber ich brauche [["b", 30], ["a", 20], ["c", 10]]
Wie können wir dafür sorgen, dass es umgekehrt funktioniert <=>
? Was bedeutet das?
h.sort_by(&:last).reverse
? Irgendwelche Zeiten dazu?h.sort {|a,b| b[1]<=>a[1]}
quelle
<=>
vergleicht die beiden Operanden und gibt -1 zurück, wenn der erste niedriger ist, 0, wenn sie gleich sind, und 1, wenn der erste höher ist. Dies bedeutet, dass Sie einfach-(a[1]<=>b[1])
die Reihenfolge umkehren können.quelle
<=>
negiert ist, muss ich mir noch den tatsächlichen Vergleich ansehen, um zu wissen, was los ist. Es ist ein kleiner Punkt, aber etwas, das mir bewusst ist, weil ich spüre, dass mein Gehirn die zweite Überprüfung durchführen muss, nachdem ich ein "Was!?"b[1]<=>a[1]
sieht es hella ausa[1]<=>b[1]
und ich habe das Bedürfnis anzuhalten und zu überprüfen, während die Negation sofort deutlich macht, dass wir eine umgekehrte Sortierung durchführen.>=<
für die umgekehrte Reihenfolge? Nein, das wäre genauso schlimm. Es ist das gesamte Konstrukt, aber ich bevorzuge<=>
einen ausführlicheren Ansatz, bei dem wir einige Methodennamen aufrufen müssten.Super einfach:
h.sort_by { |k, v| -v }
quelle