Wenn Sie eine Vec<u32>
haben, würden Sie die slice::binary_search
Methode verwenden.Wie mache ich eine binäre Suche auf einem Vec von Schwimmern?
Aus Gründen, die ich nicht verstehe, f32
und f64
implementieren Sie nicht Ord
. Da die primitiven Typen aus der Standardbibliothek stammen, können Sie Ord
nicht selbst implementieren, so dass Sie diese Methode nicht verwenden können.
Wie können Sie das effektiv tun?
Muss ich wirklich f64
in eine Wrapper-Struktur wickeln und Ord
darauf implementieren? Es scheint extrem schmerzhaft zu sein, dies zu tun, und involviert eine Menge von transmute
, um Blöcke von Daten unsicher und ohne Grund zu werfen.
Einer der Scheibe Erweiterungsmethoden ist 'binary_search_by', die Sie nutzen könnten. 'f32' /' f64' implementieren 'PartialOrd', wenn Sie also wissen, dass sie niemals' NaN' sein können, können Sie das Ergebnis von 'partial_cmp' auspacken: http://doc.rust-lang.org/std/slice/ trait.SliceExt.html # tymethod.binary_search_by – BurntSushi5
Man kann die Kiste [ordered_float] (https://crates.io/crates/ordered-float) oder [ord_subset] (https://crates.io/crates/ord_subset) verwenden. Siehe http://stackoverflow.com/a/37144472/5189607 – malbarbo