如何将字符串的 HashSet 转换为 Vector?
How do I convert a HashSet of Strings into a Vector?
我正在尝试将 HashSet<String>
转换为排序向量,然后可以用逗号 join
ed:
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>
,以便加入?
中给出的示例似乎不适用,因为 Args
returns String
值的迭代器不同于 HashSet
的迭代器returns &String
.
我鼓励您重新阅读 The Rust Programming Language, specifically the chapter on iterators. Next, become familiar with the methods of Iterator
。
我希望看到这个实现的正常方法是将 HashSet
转换为迭代器,然后 collect
将迭代器转换为 Vec
:
let mut v: Vec<_> = hs.into_iter().collect();
在这种情况下,我更愿意直接使用 FromIterator
(与 collect
相同的特性):
let mut v = Vec::from_iter(hs);
专注于更大的问题,改用 BTreeSet
,再加上
use itertools::Itertools; // 0.10.1
use std::collections::BTreeSet;
fn main() {
// Create the set somehow
let hs: BTreeSet<_> = ["fee", "fie", "foo", "fum"]
.into_iter()
.map(String::from)
.collect();
println!("{}", hs.iter().format(", "));
}
有一种直接的方法可以使用涡轮鱼 (::<>
) 将 String
的 HashSet
转换为 String
的 Vec
:
let result_vec: Vec<String> = result_set.into_iter().collect::<Vec<String>>();
我正在尝试将 HashSet<String>
转换为排序向量,然后可以用逗号 join
ed:
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>
,以便加入?
Args
returns String
值的迭代器不同于 HashSet
的迭代器returns &String
.
我鼓励您重新阅读 The Rust Programming Language, specifically the chapter on iterators. Next, become familiar with the methods of Iterator
。
我希望看到这个实现的正常方法是将 HashSet
转换为迭代器,然后 collect
将迭代器转换为 Vec
:
let mut v: Vec<_> = hs.into_iter().collect();
在这种情况下,我更愿意直接使用 FromIterator
(与 collect
相同的特性):
let mut v = Vec::from_iter(hs);
专注于更大的问题,改用 BTreeSet
,再加上
use itertools::Itertools; // 0.10.1
use std::collections::BTreeSet;
fn main() {
// Create the set somehow
let hs: BTreeSet<_> = ["fee", "fie", "foo", "fum"]
.into_iter()
.map(String::from)
.collect();
println!("{}", hs.iter().format(", "));
}
有一种直接的方法可以使用涡轮鱼 (::<>
) 将 String
的 HashSet
转换为 String
的 Vec
:
let result_vec: Vec<String> = result_set.into_iter().collect::<Vec<String>>();