How to sort a vector of strings where each string represents a decimal number in Rust

1 Answer

0 votes
fn main() {
    // Input vector of strings
    let mut numbers = vec![
        "12.3", "5.6", "789.1", "3.14", "456.0", "0", "0.01", "4.0",
    ];

    // Sort the vector using the custom comparator
    numbers.sort_by(|a, b| compare_as_decimal(a, b));

    println!("Sorted vector of decimal strings:");
    for num in &numbers {
        print!("{}  ", num);
    }
}

// Comparator function to sort strings as decimal numbers
fn compare_as_decimal(a: &str, b: &str) -> std::cmp::Ordering {
    // Convert strings to float for comparison
    let num_a = a.parse::<f64>().unwrap_or(f64::NAN);
    let num_b = b.parse::<f64>().unwrap_or(f64::NAN);

    num_a.partial_cmp(&num_b).unwrap_or(std::cmp::Ordering::Equal)
}



/*
run:

Sorted vector of decimal strings:
0  0.01  3.14  4.0  5.6  12.3  456.0  789.1 

*/

 



answered Sep 1 by avibootz
...