Dipecahkan: urutkan vec

Pembaharuan Terakhir: 09/13/2023

Rust, bahasa pemrograman sistem multi-paradigma, dibuat untuk memberikan keamanan memori yang lebih baik sekaligus menjaga kecepatan, adalah topik pembahasan mendalam kami hari ini. Secara khusus kita akan membahas secara detail cara mengurutkan vektor bilangan floating-point (f32) di Rust. Kebutuhan dan kegunaan penyortiran data tidak dapat dilebih-lebihkan karena memainkan peran penting dalam berbagai aplikasi, mulai dari database dan statistik hingga teori komputasi. Penyortiran data sangat penting dalam teknologi komputer, baik Anda memfilter email atau mencari rute tercepat pulang kerja.

Menyortir Vektor f32 di Rust

Di Rust, cara sederhana untuk mengurutkan vektor (Vec) dengan nilai f32 adalah dengan menggunakan metode .sort_by(), bersama dengan fungsi total_cmp dari peti float_ord. Metode ini memungkinkan penyortiran nilai f32 yang aman dan efisien.
Pertama, Anda harus memasukkan peti float_ord ke dalam file `Cargo.toml` proyek Anda seperti yang terlihat di bawah.

[dependensi]
float_ord = “0.2”

Lalu, inilah cara sederhana untuk mengurutkan Vec:

peti luar float_ord;
gunakan float_ord::FloatOrd;

fn utama() {
biarkan mut nums = vec![FloatOrd(-2.2), FloatOrd(-1.1), FloatOrd(0.0), FloatOrd(1.1), FloatOrd(2.2)];
angka.sort();
biarkan angka: Vec = angka.iter().map(|n| n.0).collect();
print!(“{:?}”, angka);
}

Secara langsung, baris pertama mendeklarasikan penggunaan kata kunci `extern` untuk mengimpor peti float_ord ke dalam program kita. Baris kedua kemudian membawa struct `FloatOrd` dari peti `float_ord` ke dalam cakupan. Kami memberi nama vektor kami `nums` dan mengisinya dengan angka.

Penjelasan detail

Skrip di atas dimulai dengan mengimpor peti float_ord, yang menyediakan pembungkus FloatOrd yang memungkinkan pengurutan total dan perbandingan kesetaraan untuk tipe floating-point. Sangat penting untuk menggunakan pembungkus ini, karena perbandingan langsung nilai floating-point dapat memberikan hasil yang tidak terduga karena masalah NaN (Bukan Angka).

Dalam fungsi utama, kita mendefinisikan angka Vektor yang bisa berubah. Angka-angka yang disebutkan di atas dibungkus dalam fungsi FloatOrd(), pembungkus yang disediakan oleh peti float_ord. Dengan pembungkus ini, vektor angka dapat diurutkan melalui metode `.sort()`.

Kemudian, untuk mengubah vektor kita kembali ke f32, kita menggunakan fungsi iterator Rust yang kuat `iter()`, ditandai dengan `map()`, dan `collect()`. Di sini, `map()` menerapkan fungsi ke setiap elemen Vektor.

Fungsi dan Pustaka Terkait

Fungsi terkait di Rust adalah metode `sort_unstable()` yang umumnya lebih cepat daripada metode `sort()`, namun mungkin tidak mempertahankan urutan elemen yang sama. Hal ini mungkin tidak menjadi masalah ketika mengurutkan angka, namun dapat menjadi signifikan ketika mengurutkan struct atau pasangan.

Fungsi `sort_by_key()` berguna ketika Anda ingin mengurutkan struct atau tipe kompleks lainnya berdasarkan atribut tertentu. Anda cukup meneruskan fungsi yang mengambil elemen Vektor dan mengembalikan kunci yang ingin Anda urutkan.

Pustaka standar Rust, std::cmp, juga menyediakan dua ciri utama, `PartialOrd` dan `PartialEq`, untuk membandingkan instance suatu tipe untuk pengurutan, namun ini harus digunakan dengan hati-hati dengan bilangan floating point karena masalah NaN.

Singkatnya, wrapper FloatOrd menangani masalah ini dengan menyediakan perbandingan pemesanan dan kesetaraan total untuk tipe floating-point dengan cara yang aman dan efektif.

Pos terkait: