Rust, multiparadigmatický systémový programovací jazyk, vytvořený tak, aby poskytoval lepší bezpečnost paměti při zachování rychlosti, je dnes tématem našeho hlubokého ponoru. Konkrétně podrobně probereme, jak třídit vektor čísel s plovoucí desetinnou čárkou (f32) v Rustu. Nezbytnost a užitečnost třídění dat nelze přeceňovat, protože hraje klíčovou roli v různých aplikacích, od databází a statistik až po výpočetní teorii. Třídění dat je v počítačové technologii zásadní, ať už filtrujete e-maily nebo hledáte nejrychlejší cestu domů z práce.
Třídění vektoru f32 v rzi
V Rustu je jednoduchým způsobem, jak třídit vektor (Vec) hodnot f32, použít metodu .sort_by() spolu s funkcí total_cmp z přepravky float_ord. Tato metoda umožňuje bezpečné a efektivní třídění hodnot f32.
Nejprve musíte zahrnout přepravku float_ord do souboru `Cargo.toml` vašeho projektu, jak je vidět níže.
[závislosti]
float_ord = "0.2"
Pak je zde jednoduchý způsob, jak třídit Vec
externí přepravka float_ord;
použijte float_ord::FloatOrd;
fn main() {
let mut nums = vec![FloatOrd(-2.2), FloatOrd(-1.1), FloatOrd(0.0), FloatOrd(1.1), FloatOrd(2.2)];
nums.sort();
nechť nums: Vec
print!(“{:?}”, nums);
}
Od paty k patě, první řádek deklaruje použití klíčového slova `extern` k importu přepravky float_ord do našeho programu. Druhý řádek pak přenese do rozsahu strukturu `FloatOrd` z bedny `float_ord`. Náš vektor pojmenujeme `nums` a naplníme ho čísly.
Podrobné vysvětlení
Výše uvedený skript začíná importem přepravky float_ord, která poskytuje obal FloatOrd, který umožňuje úplné řazení a porovnání rovnosti pro typy s plovoucí desetinnou čárkou. Je velmi důležité použít tento obal, protože přímé srovnání hodnot s plovoucí desetinnou čárkou může vyvolat nepředvídatelné výsledky kvůli problému NaN (není číslo).
Ve funkci main definujeme proměnlivý Vector nums. Výše uvedená čísla jsou zabalena ve funkci FloatOrd(), což je obal poskytovaný přepravkou float_ord. S těmito obaly lze vektor nums třídit pomocí metody `.sort()`.
Poté, abychom transformovali náš vektor zpět na f32, použijeme výkonnou funkci iterátoru Rust `iter()`, označenou `map()` a `collect()`. Zde `map()` aplikuje funkci na každý prvek Vektoru.
Související funkce a knihovny
Související funkcí v Rustu je metoda `sort_unstable()`, která je obecně rychlejší než metoda `sort()`, ale nemusí zachovat pořadí stejných prvků. To nemusí být problém při řazení čísel, ale může to být důležité při řazení struktur nebo párů.
Funkce `sort_by_key()` je užitečná, když chcete seřadit struktury nebo jiné komplexní typy podle určitého atributu. Jednoduše předáte funkci, která vezme prvek Vektoru a vrátí klíč, podle kterého chcete seřadit.
Standardní knihovna Rust, std::cmp, také poskytuje dvě klíčové vlastnosti, `PartialOrd` a `PartialEq`, pro porovnávání instancí typu pro řazení, ale ty by měly být používány opatrně s čísly s pohyblivou řádovou čárkou kvůli záležitosti NaN.
Stručně řečeno, obálka FloatOrd řeší tento problém tím, že poskytuje srovnání celkového uspořádání a rovnosti pro typy s plovoucí desetinnou čárkou bezpečným a efektivním způsobem.