在開發程式時,常會需要將含有數字的字串(例如:圖片1,圖片2,第1章,第2章)進行排序。程式語言通常會內建字串排序功能,但是在排序字串的時候大多會發生一個問題,那就是它們會「排錯」字串內的數字。舉個例子,若要排序螢幕截圖檔案的檔名,分別有shot-2, shot-1shot-11這三張截圖,則檔名的正確排序的結果應為shot-1, shot-2, shot-11,但許多程式語言只會按照字串的辭典順序,將檔名排成shot-1, shot-11, shot-2這樣不直覺的結果,就連Rust程式語言也不例外。所以如果要讓Rust程式語言正確排序含有數字的字串,該怎麼做呢?



Alphanumeric Sort

「Alphanumeric Sort」是筆者開發的套件,可以正確比較包含數字的字串的順序,並支援字串陣列和Path結構實體陣列的排序。

Crates.io

Cargo.toml

alphanumeric-sort = "*"

使用方法

若要比較兩個字串的順序,可以使用compare_str函數。

use std::cmp::Ordering;

assert_eq!(Ordering::Greater, compare_str("abc3210", "abc321"));

若要排序字串陣列(切片),可以使用sort_str_slice函數。

let mut names = ["shot-2", "shot-1", "shot-11"];

alphanumeric_sort::sort_str_slice(&mut names);

assert_eq!(["shot-1", "shot-2", "shot-11"], names);

若要排序Path結構實體陣列(切片),可以使用sort_path_slice函數。

use std::path::Path;

let mut paths = [Path::new("shot-2"), Path::new("shot-1"), Path::new("shot-11")];

alphanumeric_sort::sort_path_slice(&mut paths);

assert_eq!([Path::new("shot-1"), Path::new("shot-2"), Path::new("shot-11")], paths);

另外還有sort_os_str_slicesort_c_str_slice函數可以使用。