gpt4 book ai didi

vector - 从 Rust 中的向量构建 HashSet

转载 作者:行者123 更新时间:2023-11-29 07:40:50 33 4
gpt4 key购买 nike

我想构建一个 HashSet<u8>来自Vec<u8> .我想做这个

  1. 一行代码,
  2. 只复制一次数据,
  3. 仅使用 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。

最佳答案

因为操作不需要消耗向量¹,我认为它不应该消耗它。这只会导致程序中其他地方的额外复制:

use std::collections::HashSet;
use std::iter::FromIterator;

fn hashset(data: &[u8]) -> HashSet<u8> {
HashSet::from_iter(data.iter().cloned())
}

hashset(&v) 一样调用它其中 vVec<u8>或其他强制切片的东西。

当然有更多的方式来写这个,通用等等,但这个答案坚持只介绍我想关注的事情。

¹这是基于元素类型 u8Copy ,即它没有所有权语义。

关于vector - 从 Rust 中的向量构建 HashSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39803237/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com