我正在寻找在元组的第二部分中最常出现的字符串Vec<(String, Vec<String>)>
:
use itertools::Itertools; // 0.8.0
fn main() {
let edges: Vec<(String, Vec<String>)> = vec![];
let x = edges
.iter()
.flat_map(|x| &x.1)
.map(|x| &x[..])
.sorted()
.group_by(|x| x)
.max_by_key(|x| x.len());
}
Run Code Online (Sandbox Code Playgroud)
这个:
&str
这应该给了我最常出现的字符串的组,除了它不编译:
use itertools::Itertools; // 0.8.0
fn main() {
let edges: Vec<(String, Vec<String>)> = vec![];
let x = edges
.iter()
.flat_map(|x| &x.1)
.map(|x| &x[..])
.sorted()
.group_by(|x| x)
.max_by_key(|x| x.len());
}
Run Code Online (Sandbox Code Playgroud)
我完全迷失在这些类型中。
您没有阅读正在使用的函数的文档。这不是一个好主意。
这个类型实现了
IntoIterator
(它本身不是迭代器),因为组迭代器需要借用这个值。它应该存储在局部变量或临时和迭代中。
就个人而言,我只使用 a BTreeMap
or HashMap
:
let mut counts = BTreeMap::new();
for word in edges.iter().flat_map(|x| &x.1) {
*counts.entry(word).or_insert(0) += 1;
}
let max = counts.into_iter().max_by_key(|&(_, count)| count);
println!("{:?}", max);
Run Code Online (Sandbox Code Playgroud)
如果你真的想使用迭代器,它可能看起来像这样:
let groups = edges
.iter()
.flat_map(|x| &x.1)
.sorted()
.group_by(|&x| x);
let max = groups
.into_iter()
.map(|(key, group)| (key, group.count()))
.max_by_key(|&(_, count)| count);
Run Code Online (Sandbox Code Playgroud)