Rust, višeparadigmski sistemski programski jezik, napravljen da pruži bolju sigurnost memorije uz održavanje brzine, tema je našeg današnjeg dubokog ronjenja. Konkretno, detaljno ćemo raspravljati o tome kako sortirati vektor brojeva s pomičnim zarezom (f32) u Rustu. Neophodnost i korisnost sortiranja podataka ne može se precijeniti jer ono igra ključnu ulogu u različitim aplikacijama, u rasponu od baze podataka i statistike do teorije računarstva. Razvrstavanje podataka je bitno u kompjuterskoj tehnologiji, bilo da filtrirate e-poštu ili tražite najbrži put kući s posla.
Sortiranje vektora od f32 u Rust-u
U Rustu, jednostavan način za sortiranje vektora (Vec) vrijednosti f32 je korištenje metode .sort_by(), zajedno sa funkcijom total_cmp iz float_ord sanduka. Ova metoda omogućava sigurno i efikasno sortiranje vrijednosti f32.
Prvo, morate uključiti sanduk float_ord u datoteku `Cargo.toml` vašeg projekta kao što se vidi ispod.
[ovisnosti]
float_ord = "0.2"
Zatim, evo jednostavnog načina da sortirate Vec
vanjski sanduk float_ord;
koristite float_ord::FloatOrd;
fn main() {
neka mut nums = vec![FloatOrd(-2.2), FloatOrd(-1.1), FloatOrd(0.0), FloatOrd(1.1), FloatOrd(2.2)];
nums.sort();
let nums: Vec
print!(“{:?}”, brojevi);
}
Od prstiju do pete, prvi red deklarira upotrebu ključne riječi `extern` za uvoz sanduka float_ord u naš program. Drugi red zatim dovodi strukturu `FloatOrd` iz sanduka `float_ord` u opseg. Naš vektor imenujemo `nums` i popunjavamo ga brojevima.
Detaljno objašnjenje
Gornja skripta počinje uvozom float_ord sanduka, koji pruža omotač FloatOrd koji omogućava potpuni poredak i poređenje jednakosti za tipove s pomičnim zarezom. Ključno je koristiti ovaj omotač, jer direktna poređenja vrijednosti s pomičnim zarezom mogu izazvati nepredvidive rezultate zbog problema s NaN (nije broj).
U glavnoj funkciji definiramo promjenjive vektorske brojeve. Pomenuti brojevi su umotani u funkciju FloatOrd(), omotač koji obezbeđuje float_ord sanduk. Sa ovim omotima na mjestu, nums vektor se može sortirati putem `.sort()` metode.
Zatim, da transformišemo naš vektor nazad u f32, koristimo Rustovu moćnu funkciju iteratora `iter()`, označenu sa `map()`, i `collect()`. Ovdje `map()` primjenjuje funkciju na svaki element vektora.
Povezane funkcije i biblioteke
Srodna funkcija u Rustu je metoda `sort_unstable()` koja je općenito brža od metode `sort()`, ali možda neće zadržati redoslijed jednakih elemenata. Ovo možda nije problem prilikom sortiranja brojeva, ali može biti značajno kada se sortiraju strukture ili parovi.
Funkcija `sort_by_key()` je korisna kada želite sortirati strukture ili druge složene tipove prema određenom atributu. Jednostavno prosljeđujete funkciju koja uzima element Vector i vraća ključ po kojem želite sortirati.
Rustova standardna biblioteka, std::cmp, takođe obezbeđuje dve ključne osobine, `PartialOrd` i `PartialEq`, za poređenje instanci tipa za sortiranje, ali ih treba oprezno koristiti sa brojevima u pokretnom zarezu zbog NaN.
Ukratko, omotač FloatOrd rješava ovu brigu tako što pruža potpuni poredak i jednakost za tipove s pomičnim zarezom na siguran i efikasan način.
