gpt4 book ai didi

sorting - 用 rust 打印 NBA MVP 名单

转载 作者:行者123 更新时间:2023-11-29 08:35:34 28 4
gpt4 key购买 nike

我正在阅读 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);
}

}

最佳答案

终于找到了更好的。

use itertools::Itertools;

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 mvps_count = MVPS.lines()
.map(|line| &line[12..line.find(',').unwrap_or(line.len())])
.into_iter()
.sorted()
.group_by(|name| *name)
.into_iter()
.map(|(key, group)| (key, group.count()))
.sorted_by(|a, b| (b.1).cmp(&a.1))
.inspect(|(key, count)| println!("{}: {}", key, count))
.map(|(_key, count)| count)
.fold(0 as usize, |a, b| a + b);

println!("{}", MVPS.lines().count() == mvps_count);
}

关于sorting - 用 rust 打印 NBA MVP 名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55989927/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com