Verwenden von max_by_key auf einen Vektor von floats
Ich möchte benutzenmax_by_key
, um den Maximalwert aus einem Vektor von @ zu erhaltf64
s basierend auf einem bestimmten Schlüssel. Dies ist ein einfaches Beispiel mit einem kleinen Vektor undabs
als Schlüssel:
let a: Vec<f64> = vec![-3.0, 0.2, 1.4];
*a.iter().max_by_key(|n| n.abs()).unwrap()
Jedoch, seitf64
implementiert nichtOrd
, Ich bekomm
error[E0277]: the trait bound `f64: std::cmp::Ord` is not satisfied
--> src/main.rs:3:15
|
3 | *a.iter().max_by_key(|n| n.abs()).unwrap();
| ^^^^^^^^^^ the trait `std::cmp::Ord` is not implemented for `f64`
Ähnlich,sort_by_key
schlägt mit demselben Fehler fehl:
a.sort_by_key(|n| n.abs())
Ich weiß, dass ich die Einschränkung der teilweisen Reihenfolge umgehen kann, um einen Vektor von Floats mit @ zu sortieresort_by
b.sort_by(|m, n| m.partial_cmp(n).unwrap_or(Less))
Aber das müsste auf einem Vektor aufgerufen werdenb
für die ich den Schlüssel berechnet habe (in diesem Fallabs
) für jedes Element vona
, und dann müsste ich zurückgehen und das entsprechende Element von @ finda
, was kompliziert und langsam erscheint. Wenn die Anzahl der Elemente in der Liste zunimmt, möchte ich die Datenübergänge minimieren.
Gibt es irgendwelche Workarounds?