vector - 如何将字符串的 HashSet 转换为向量?

标签 vector rust hashset borrowing

我正在尝试转换 HashSet<String>成一个排序的向量,然后可以是 join用逗号编辑:

use std::collections::HashSet;

fn main() {
    let mut hs = HashSet::<String>::new();
    hs.insert(String::from("fee"));
    hs.insert(String::from("fie"));
    hs.insert(String::from("foo"));
    hs.insert(String::from("fum"));

    let mut v: Vec<&String> = hs.iter().collect();
    v.sort();

    println!("{}", v.join(", "));
}

这不会编译:

error[E0599]: no method named `join` found for struct `std::vec::Vec<&std::string::String>` in the current scope
  --> src/main.rs:13:22
   |
13 |     println!("{}", v.join(", "));
   |                      ^^^^ method not found in `std::vec::Vec<&std::string::String>`

我明白为什么我不能加入 Vec<&String> ,但我如何转换 HashSetVec<String>相反,所以它可以加入?

What's an idiomatic way to print an iterator separated by spaces in Rust? 中给出的示例似乎不适用,因为 Args 的迭代器返回 String值,与 HashSet 的迭代器不同返回 &String .

最佳答案

我鼓励您重新阅读 The Rust Programming Language ,特别是 the chapter on iterators .接下来,熟悉 Iterator 的方法.

我希望看到这个实现的正常方法是转换 HashSet到迭代器,然后 collect Vec 的迭代器:

let mut v: Vec<_> = hs.into_iter().collect();

在这种情况下,我更愿意使用 FromIterator 直接(赋予 collect 相同的特征):
let mut v = Vec::from_iter(hs);

专注于更大的问题,使用 BTreeSet相反,加上 What's an idiomatic way to print an iterator separated by spaces in Rust?
use itertools::Itertools;
use std::collections::BTreeSet; // 0.9.0

fn main() {
    // Create the set somehow
    let hs: BTreeSet<_> = ["fee", "fie", "foo", "fum"]
        .iter()
        .copied()
        .map(String::from)
        .collect();

    println!("{}", hs.iter().format(", "));
}

关于vector - 如何将字符串的 HashSet 转换为向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60893051/

相关文章:

C++删除指针 vector

c++ - 如何在 C++ 中填充数据或访问 3 维 vector

java - 为什么我的哈希集如此耗费内存?

java - Java 中是否有任何构建方法可以将 2 个整数组合成一个 Set?

c++ - 增加容量时,std::vector *有*移动对象吗?或者,分配器可以 "reallocate"吗?

c++ - 如何找到 vector 中的最大元素 (C++)?

methods - 如何为此Rust特征使用相同的默认实现

arrays - 沿维度求和数组

macros - 克服 Rust 宏中的 "local ambiguity: multiple parsing options:"

c - 如何使用C打印哈希集的所有值?我已将字符串存储在哈希集中,现在我想显示它