max_by_key
を使用して、特定のキーに基づいてf64
のベクトルから最大値を取得します。 f64
はOrd
を実装していないので、私は浮動小数点のベクトルにmax_by_keyを使用する
src/satyrs/heuristics.rs:35:15: 35:38 error: the trait `core::cmp::Ord` is not implemented for the type `f64` [E0277]
src/satyrs/heuristics.rs:35 *a.iter().max_by_key(|x| x.abs()).unwrap()
同様に、sort_by_key
が同じエラーで失敗し得る、しかし
let a: Vec<f64> = vec![-3.0, 0.2, 1.4];
*a.iter().max_by_key(|n| n.abs()).unwrap()
:これはキーのような小さなベクトルとabs
で、簡単な例です:
a.sort_by_key(|n| n.abs())
浮動小数点ベクトルをでソートする部分順序制約を回避できます
b.sort_by(|m, n| m.partial_cmp(n).unwrap_or(Less))
が、それは私がa
の各要素のための(この場合はabs
で)キーを計算しましたため、ベクトルb
に呼び出されなければならないだろう、と、私は戻って、見つけなければならないだろうa
の対応する要素です。これは複雑で遅いようです。リスト内のアイテムの数が増えるにつれて、データの通過を最小限に抑えたいと思います。
どのような回避策ですか?
ためのラッパー・タイプの(http://stackoverflow.com/questions/29884402/how-do-i-implement-ord-for-a-struct)[ 'Ord'実装]を' f64'。これにより、NaNの処理方法を定義する必要があります。 [例が存在する](http://stackoverflow.com/q/28247990/155423) – Shepmaster