Я читал https://www.nba.com/history/awards/mvp. И я попытался распечатать имя и считать в порядке убывания.
Kareem Abdul-Jabbar: 6
Bill Russell: 5
Michael Jordan: 5
LeBron James: 4
Wilt Chamberlain: 4
Magic Johnson: 3
...
Как новичок, мне удалось сделать это, как показано ниже.
Я использовал HashMap
для подсчета по имени и Vec
для сортировки по значению.
Но я думаю, что может быть лучшее решение.
Буду признателен за любые советы по улучшению этого.
use std::collections::HashMap;
const MVPS: &str = concat!(
"2017-18 James Harden, Houston Rockets (Voting)\n",
"2016-17 Russell Westbrook, Oklahoma City Thunder (Voting)\n",
... omitted for brevity
);
fn main() {
let lines: Vec<&str> = MVPS.split('\n')
.map(|line| &line[12..line.find(',').unwrap_or(line.len())])
.collect();
let mut mvp_map = HashMap::new();
for name in &lines {
mvp_map.insert(name, mvp_map.get(name).unwrap_or(&0) + 1);
}
let mut mvp_entry_list = Vec::new();
for entry in &mvp_map {
mvp_entry_list.push(entry);
}
mvp_entry_list.sort_by(|a, b| (b.1).cmp(a.1));
for e in &mvp_entry_list {
println!("{}: {}", e.0, e.1);
}
}