我可以做以下事情:
fn main() {
let vec = vec!["first", "last"];
println!("{}", vec.join(", "));
}
它给出了这个输出:
第一个,最后一个
如果我尝试将join
与地图类型一起使用,则会失败:
错误[E0599]:当前范围内没有为类型
join
找到名为std::collections::HashSet<&str>
的方法
答案 0 :(得分:6)
更高效的是,您可以use itertools加入迭代器而不先将其收集到Vec
:
extern crate itertools;
use std::collections::HashSet;
use itertools::Itertools;
fn main() {
let hash_set: HashSet<_> = ["first", "last"].iter().collect();
// Either of
println!("{}", hash_set.iter().join(", "));
println!("{}", itertools::join(&hash_set, ", "));
}
答案 1 :(得分:4)
您可以将HashSet
转换为Iterator
,收集它然后使用.join()
:
use std::collections::HashSet;
fn main() {
let mut books = HashSet::new();
books.insert("A Dance With Dragons");
books.insert("To Kill a Mockingbird");
books.insert("The Odyssey");
books.insert("The Great Gatsby");
println!("{}", books.into_iter().collect::<Vec<&str>>().join(", "));
}
您可以对HashMap
执行相同的操作 - 您只需先提取.keys()
或.values()
,具体取决于您要加入的内容。