我试图将一个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>
,但我应该如何将HashSet
转换为Vec<String>
以便进行连接?
在Rust中以惯用方式打印迭代器并以空格分隔的示例不适用,因为Args
的迭代器返回String
值,而HashSet
的迭代器返回&String
。
into_iter
以获取这些值的所有权。 - squiguy