Ral*_*lph 7 vector hashset rust borrowing
我正在尝试将 a 转换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(", "));
}
Run Code Online (Sandbox Code Playgroud)
这不会编译:
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(", "));
}
Run Code Online (Sandbox Code Playgroud)
我明白为什么我不能加入Vec<&String>,但我怎样才能将 转换HashSet为 a Vec<String>,以便它可以加入?
在 Rust 中打印由空格分隔的迭代器的惯用方法是什么?似乎并不适用,因为迭代器Args返回String值,不像迭代器HashSet返回&String。
She*_*ter 13
我鼓励你重新阅读Rust 编程语言,特别是关于迭代器的章节。接下来,熟悉 的方法Iterator。
我希望看到这种实现的正常方法是将 the 转换HashSet为迭代器,然后collect将迭代器转换为 a Vec:
let mut v: Vec<_> = hs.into_iter().collect();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我更愿意FromIterator直接使用(与 powers 相同的特征collect):
let mut v = Vec::from_iter(hs);
Run Code Online (Sandbox Code Playgroud)
专注于更大的问题,使用 aBTreeSet代替,再加上在 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(", "));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5401 次 |
| 最近记录: |