在 RUST 中实现自定义结构向量的过滤器

问题描述 投票:0回答:1

我是 Rust 新手,就像昨天刚开始的一样,我正在创建一个待办事项/日历应用程序来学习。我正处于通过结构和实现进行定义的最初阶段。我一直致力于创建一个过滤向量的函数。但我在使用

filter()
collect()
时遇到错误。老实说,我不确定需要做什么,我确实继续了解有关序列化的更多信息,但无法走得太远。我希望得到一些建议或解释,因为我不明白问题是什么。

错误是


error[E0277]: a value of type `TodoList<'_>` cannot be built from an iterator over elements of type `structs::Todoitem::Todoitem<'_>`
    --> src/structs/Todolist.rs:92:26
     |
92   |             .into_iter().collect()
     |                          ^^^^^^^ value of type `TodoList<'_>` cannot be built from `std::iter::Iterator<Item=structs::Todoitem::Todoitem<'_>>`

我的实现和结构如下。

pub struct TodoList<'a> {
    pub items: Vec<Todoitem<'a>>,
}

... //my implementation for filter is..
    fn helperFilterStatus(&mut self, target: Types::Status) -> TodoList<'a> {
        self.items
            .into_iter().filter(|x_item| x_item.status==target).collect()
    }

最后

todoitem

pub struct Todoitem<'a> {
    pub id: u32,
    pub title: &'a str,
    ...
  }

我还没有添加完整的实现,但如果需要的话我可以分享 git 链接。

rust vector serialization iterator rust-cargo
1个回答
0
投票

reddit 上的评论有帮助:https://www.reddit.com/r/rust/comments/1bn27hy/implementing_filter_for_vector_of_custom_struct/

impl<'a>  FromIterator<Todoitem<'a>> for TodoList<'a>  {
    fn from_iter<T: IntoIterator<Item = Todoitem<'a>> >  (iter: T) -> Self {
        let mut c =  TodoList { items: Vec::new() };
        for i in iter {
            c.add_item(i)
        }
        c
    }
}
    fn helperFilterStatus(&mut self, target: Types::Status) ->TodoList<'a>{
         self.items
            .drain(..).filter(|x_item| x_item.status==target).collect()
    }

© www.soinside.com 2019 - 2024. All rights reserved.