Lou*_*ete 4 iterator reference rust
我需要将遍历&strs 的迭代器收集到&strs 的集合中。问题是迭代器产生&&strs。
我尝试将from映射&word到word,尽管它可以正常工作,但我不知道它是否被认为是好的,或者是否有更好的选择。
问题:
use std::collections::HashSet;
fn main() {
let words = &["hello", "world", "I'm", "a", "Rustacean!"];
let hashset = words.iter().collect::<HashSet<&str>>();
}
Run Code Online (Sandbox Code Playgroud)
use std::collections::HashSet;
fn main() {
let words = &["hello", "world", "I'm", "a", "Rustacean!"];
let hashset = words.iter().collect::<HashSet<&str>>();
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案:
use std::collections::HashSet;
fn main() {
let words = &["hello", "world", "I'm", "a", "Rustacean!"];
let hashset = words.iter().map(|&w| w).collect::<HashSet<&str>>();
}
Run Code Online (Sandbox Code Playgroud)
如果T执行,Copy则可以使用Iterator::copied。否则,如果实现,Clone则可以使用Iterator::cloned。像任何不可变的引用一样,同时&str实现Clone和 Copy,因此您可以使用copied:
let hashset: HashSet<&str> = words.iter().copied().collect();
Run Code Online (Sandbox Code Playgroud)
自行车是从一个城市到达另一个城市的惯用方式吗?就像软件(和生活)中的大多数事物一样,它取决于。
Copy我希望按以下顺序进行操作:
some_iter.copied()some_iter.cloned()some_iter.map(|&v| v)some_iter.map(|v| *v)some_iter.map(Clone::clone)some_iter.map(|v| v.clone())Clone我希望按以下顺序进行操作:
some_iter.cloned()some_iter.map(Clone::clone)some_iter.map(|v| v.clone())Copy或Clone然后,您将无法轻松创建拥有的价值。该类型可能实现,ToOwned或者可能在内部调用了定制的函数或方法map,或者您可能根本无能为力。
就您而言,我会使用words.iter().copied().collect::<HashSet<_>>()。
也可以看看: