Riješeno: sortiraj vec

Posljednje ažuriranje: 09/13/2023

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 = nums.iter().map(|n| n.0).collect();
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.

Slični postovi: