Я хочу построить HashSet<u8>
из Vec<u8>
. Я бы хотел сделать это
- в одной строке кода,
- копирование данных только один раз,
- используя только
2n
память,
но единственное, что я могу скомпилировать, это кусок... мусора, который, я думаю, дважды копирует данные и использует память 3n
.
fn vec_to_set(vec: Vec<u8>) -> HashSet<u8> {
let mut victim = vec.clone();
let x: HashSet<u8> = victim.drain(..).collect();
return x;
}
Я надеялся написать что-то простое, например:
fn vec_to_set(vec: Vec<u8>) -> HashSet<u8> {
return HashSet::from_iter(vec.iter());
}
но это не будет компилироваться:
error[E0308]: mismatched types
--> <anon>:5:12
|
5 | return HashSet::from_iter(vec.iter());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected u8, found &u8
|
= note: expected type `std::collections::HashSet<u8>`
= note: found type `std::collections::HashSet<&u8, _>`
.. и я действительно не понимаю сообщение об ошибке, возможно потому, что мне нужно RTFM.