如何将HashSet的元素连接到带分隔符的String中

时间:2017-11-30 16:22:47

标签: rust

我可以做以下事情:

fn main() {
    let vec = vec!["first", "last"];
    println!("{}", vec.join(", "));
}

它给出了这个输出:

  

第一个,最后一个

如果我尝试将join与地图类型一起使用,则会失败:

  

错误[E0599]:当前范围内没有为类型join找到名为std::collections::HashSet<&str>的方法

2 个答案:

答案 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(),具体取决于您要加入的内容。