Rust Practice Exercises

Sort Structs in Rust: Student Ranking

Sort a vector of structs by score and name with sort_by, then compute the average.

  • Beginner
  • 3 min read
  • 1 runnable example
What you'll learn
  • sort_by with a closure
  • then for tie breaks
  • Average with iterators
Ranking
Leo95
Mia82
Zoe82
Ben67
Mia comes before Zoe because the scores are equal.

Sort by score, then by name

Real data is usually a list of records. Sort the students by score from high to low, break ties by name, and print the ranking.

sort_by takes a closure that compares two students. b.score.cmp(&a.score) sorts from high to low, and then falls back to the name when the scores are equal. The average converts the sum to f64 so the division keeps its fraction.

Key points

  1. b.cmp(a) sorts from high to low.
  2. then breaks ties by name.
  3. Convert to f64 before dividing.

Runnable Rust example

Rust
Run code →
main.rs
struct Student {
    name: &'static str,
    score: u32,
}

fn main() {
    let mut students = vec![
        Student { name: "Mia", score: 82 },
        Student { name: "Leo", score: 95 },
        Student { name: "Zoe", score: 82 },
        Student { name: "Ben", score: 67 },
    ];

    students.sort_by(|a, b| b.score.cmp(&a.score).then(a.name.cmp(b.name)));
    for (rank, student) in students.iter().enumerate() {
        println!("{}. {} ({})", rank + 1, student.name, student.score);
    }

    let average = students.iter().map(|s| s.score).sum::<u32>() as f64 / students.len() as f64;
    println!("average: {average:.1}");
}
Get a Run button for this example Result of running the code
1. Leo (95)
2. Mia (82)
3. Zoe (82)
4. Ben (67)
average: 81.5

Practice

Open the example in the online compiler, change a value or add a line, and predict the output before you run it. Then break the code on purpose and read the compiler's message.

Finished this lesson?

Mark it as learned to track your progress.

Practice with a challenge

Use what this lesson covers to solve a real problem. Each challenge runs in your browser with instant tests and an AI review.

All challenges