在開發程式時,常會需要將含有數字的字串(例如:圖片1
,圖片2
,第1章
,第2章
)進行排序。程式語言通常會內建字串排序功能,但是在排序字串的時候大多會發生一個問題,那就是它們會「排錯」字串內的數字。舉個例子,若要排序螢幕截圖檔案的檔名,分別有shot-2
, shot-1
和shot-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_slice
和sort_c_str_slice
函數可以使用。