gpt4 book ai didi

rust - 如何在 Rust 中使用 vec 实现过滤器

转载 作者:行者123 更新时间:2023-12-05 08:46:23 25 4
gpt4 key购买 nike

我有一个 vec i64,它存储一些带有一些实体 ID 的元素。我想过滤一些指定的实体 ID 并返回一个新的 vec。我试图在 rust 中以这种方式实现这个操作(这是一个最小的例子,真正的元素是一些单词对象):

fn main() {
let current_word_id:i64 =1;
let wordIds:Vec<i64> = Vec::new();;
let current_sentences: Vec<i64> = wordIds
.iter()
.filter(|sen| sen == current_word_id)
.collect();
}

当我编译这段代码时,遇到了这样的问题:

error[E0277]: can't compare `&&i64` with `i64`
--> src/main.rs:16:27
|
16 | .filter(|sen| sen == current_word_id)
| ^^ no implementation for `&&i64 == i64`
|
= help: the trait `PartialEq<i64>` is not implemented for `&&i64`

error[E0277]: a value of type `Vec<i64>` cannot be built from an iterator over elements of type `&i64`
--> src/main.rs:17:10
|
17 | .collect();
| ^^^^^^^ value of type `Vec<i64>` cannot be built from `std::iter::Iterator<Item=&i64>`
|
= help: the trait `FromIterator<&i64>` is not implemented for `Vec<i64>`

Some errors have detailed explanations: E0277, E0432.
For more information about an error, try `rustc --explain E0277`.

我关注https://codereview.stackexchange.com/questions/244880/filtering-a-vec-of-structs-and-creating-new-vector-of-strings-or-strs-in-rust .为什么没有按预期工作?我应该怎么做才能让它发挥作用?用 Rust 中的 vec 做一些过滤器的正确方法是什么?

最佳答案

所以...这里有一些东西。

遍历 Vec 时,您可以使用 2 种方法 - iter(&self)into_iter(self) .第一个引用了 Vec并对其进行迭代 - 本质上是对 Vec 的看法.第二个消耗了 Vec并对其进行迭代,在此过程中销毁它并转动 Vec 进入一个迭代器。

您已经使用了第一个,因此您应该处理 Vec<i64> 中的引用或 &i64 . filter 函数不应该采用迭代的值,因为这意味着耗尽迭代器,因此它引用迭代器内部的元素(在本例中为 &i64 从而获得 &&i64 )。所以修复 &&i64 == i64问题在于确保类型匹配(即 |sen| sen == &&current_word_id 或取消引用 sen )。

此处的第二部分是因为您正在遍历 &i64正如我们之前看到的,这正是您要收集的内容。这可以通过将项目映射到取消引用的值来解决。考虑到这在第一个问题中也是可能的,这个映射可以发生在过滤器之前。

把它放在一起,它会把这个例子归结为:

fn main() {
let current_word_id:i64 =1;
let wordIds:Vec<i64> = Vec::new();
let current_sentences: Vec<i64> = wordIds
.iter()
.map(|v| *v)
.filter(|sen| sen == &current_word_id)
.collect();
}

关于rust - 如何在 Rust 中使用 vec 实现过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69776785/

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