Tôi muốn tạo một HashSet<u8>
từ một Vec<u8>
. Tôi muốn làm điều nàyXây dựng HashSet từ một vector trong Rust
- trong một dòng mã,
- sao chép các dữ liệu chỉ một lần,
- chỉ sử dụng
2n
nhớ,
nhưng điều duy nhất tôi có thể tới biên dịch là mảnh này .. rác, mà tôi nghĩ rằng sao chép dữ liệu hai lần và sử dụng bộ nhớ 3n
.
fn vec_to_set(vec: Vec<u8>) -> HashSet<u8> {
let mut victim = vec.clone();
let x: HashSet<u8> = victim.drain(..).collect();
return x;
}
Tôi đã hy vọng để viết một cái gì đó đơn giản, như thế này:
fn vec_to_set(vec: Vec<u8>) -> HashSet<u8> {
return HashSet::from_iter(vec.iter());
}
nhưng điều đó sẽ không biên dịch:
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, _>`
.. và tôi không thực sự hiểu được những lỗi tin nhắn, có lẽ vì tôi cần RTFM.
Mã và thông báo lỗi không khớp. Bạn phải có nghĩa là 'iter() ' – bluss
FYI: trong mã đầu tiên của bạn, bạn không cần sao chép vectơ, bạn chỉ cần khai báo nó là có thể thay đổi được. Hoặc bằng 'let mut victim = vec;' hoặc trong danh sách đối số bởi: 'fn vec_to_set (mut vec: Vec)'. –
Bạn không sử dụng ký hiệu * O * một cách chính xác. _O (n) = O (2n) = O (3n) = O (c * n) _. Vấn đề là hằng số không quan trọng. Tôi nghĩ rằng nó là rõ ràng những gì bạn có nghĩa là nhưng bạn có lẽ nên nói chỉ là "_2n_ bộ nhớ" hoặc một cái gì đó để thay thế. – Lii