Rust 練習問題
Sort Structs in Rust: Student Ranking
Sort a vector of structs by score and name with sort_by, then compute the average.
学べること
- sort_by with a closure
- then for tie breaks
- Average with iterators
Ranking
Leo95
Mia82
Zoe82
Ben67
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.
重要なポイント
b.cmp(a)sorts from high to low.- then breaks ties by name.
- Convert to f64 before dividing.
実行できる Rust のサンプル
Rust
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}");
}
1. Leo (95)
2. Mia (82)
3. Zoe (82)
4. Ben (67)
average: 81.5練習
サンプルをオンラインコンパイラーで開き、値を変えたり行を追加したりして、実行する前に出力を予想してみましょう。次に、わざとコードを壊してコンパイラーのメッセージを読んでみてください。
このレッスンを終えましたか?
学習済みにすると進み具合を記録できます。
進み具合はこのブラウザーに保存されています ログインすると、どのデバイスでも引き継げます。
チャレンジで練習する
このレッスンの内容を使って実際の問題を解きましょう。各チャレンジはブラウザで動き、すぐにテストされ、AI のレビューも受けられます。
- 選んだキーで並べ替え 実行時に選んだ比較器で、名前または年齢順に人を並べ替え、同順位は一貫した方法で解消します。 簡単
- Tournament Standings Rank teams from match records. 中級