Ratkaistu: lajittele vec

Viimeisin päivitys: 09/13/2023
Kirjoittaja: Rust SourceTrail

Rust, usean paradigman järjestelmän ohjelmointikieli, joka on suunniteltu parantamaan muistin turvallisuutta säilyttäen samalla nopeuden, on tämän päivän syvällisyytemme aihe. Tarkemmin sanottuna keskustelemme yksityiskohtaisesti kuinka lajitella liukulukulukujen vektori (f32) Rustissa. Tietojen lajittelun tarpeellisuutta ja hyödyllisyyttä ei voi liioitella, sillä sillä on keskeinen rooli erilaisissa sovelluksissa tietokannasta ja tilastoista laskennalliseen teoriaan. Tietojen lajittelu on olennaista tietotekniikassa, olitpa sitten sähköpostien suodatusta tai nopeinta reittiä töistä kotiin etsimässä.

F32-vektorin lajittelu ruosteessa

Rustissa yksinkertainen tapa lajitella f32-arvojen vektori (Vec) on käyttää .sort_by()-metodia yhdessä float_ord-laatikon total_cmp-funktion kanssa. Tämä menetelmä mahdollistaa f32-arvojen turvallisen ja tehokkaan lajittelun.
Ensinnäkin, sinun on sisällytettävä float_ord-laatikko projektisi `Cargo.toml`-tiedostoon, kuten alla näkyy.

[riippuvuudet]
float_ord = "0.2"

Sitten tässä on yksinkertainen tapa lajitella Vec:

ulkoinen laatikko float_ord;
käytä float_ord::FloatOrd;

fnmain() {
anna mut nuums = vec![FloatOrd(-2.2), FloatOrd(-1.1), FloatOrd(0.0), FloatOrd(1.1), FloatOrd(2.2)];
numerot.sort();
anna numerot: Vec = numerot.iter().kartta(|n| n.0).collect();
tulosta!("{:?}", numerot);
}

Toe to heel, ensimmäinen rivi ilmoittaa "extern"-avainsanan käytön float_ord-laatikon tuomiseksi ohjelmaamme. Toinen rivi tuo sitten FloatOrd-rakenteen float_ord-laatikosta laajuuteen. Annamme vektorillemme nimen "luvut" ja täytämme sen numeroilla.

Yksityiskohtainen selitys

Yllä oleva komentosarja alkaa tuomalla float_ord-laatikko, joka tarjoaa FloatOrd-kääreen, joka mahdollistaa täydellisen järjestyksen ja tasavertailun liukulukutyypeille. On ratkaisevan tärkeää käyttää tätä käärettä, koska liukulukuarvojen suorat vertailut voivat saada aikaan arvaamattomia tuloksia NaN (Not a Number) -ongelman vuoksi.

Pääfunktiossa määrittelemme muuttuvat vektorinumerot. Edellä mainitut luvut kääritään FloatOrd()-funktioon, jonka kääre tarjoaa float_ord crate. Kun nämä kääreet ovat paikoillaan, numerovektorit voidaan lajitella `.sort()-menetelmällä.

Sitten, jotta voimme muuttaa vektorimme takaisin f32:ksi, käytämme Rustin tehokasta iteraattorifunktiota 'iter()', joka on merkitty 'map()' ja 'collect()'. Tässä `map()` käyttää funktiota jokaiseen vektorin elementtiin.

Liittyvät toiminnot ja kirjastot

Tähän liittyvä funktio Rustissa on "sort_unstable()", joka on yleensä nopeampi kuin "sort()", mutta se ei välttämättä säilytä yhtäläisten elementtien järjestystä. Tämä ei ehkä ole huolenaihe numeroiden lajittelussa, mutta sillä voi olla merkitystä järjestettäessä rakenteita tai pareja.

"sort_by_key()" -funktio on hyödyllinen, kun haluat lajitella rakenteita tai muita monimutkaisia ​​tyyppejä tietyn määritteen mukaan. Syötät vain funktion, joka ottaa vektorin elementin ja palauttaa avaimen, jonka mukaan haluat lajitella.

Rustin vakiokirjasto, std::cmp, tarjoaa myös kaksi keskeistä ominaisuutta, `PartialOrd` ja `PartialEq`, joiden avulla voidaan vertailla tyypin esiintymiä lajittelua varten, mutta näitä tulee käyttää varoen liukulukujen kanssa NaN:n vuoksi.

Lyhyesti sanottuna FloatOrd-kääre hoitaa tämän huolen tarjoamalla täydelliset järjestys- ja tasavertailut liukulukutyypeille turvallisella ja tehokkaalla tavalla.

Related viestiä: