相关疑难解决方法(0)

如何在Rust中为特定集合类型(列表/集合/地图)创建一个空的迭代器?

我想编写一个返回集合迭代器(例如 LinkedList)的方法。但是在某些情况下,没有合适的集合可以返回迭代器。在这种情况下,我想返回一个“空”迭代器,该迭代器不对任何元素进行迭代。但是,我找不到任何相关的功能构建linked_list::Iter的文档

考虑以下示例:

use std::collections::HashMap;
use std::collections::LinkedList;
use std::collections::linked_list;

pub struct Graph {
    nodes: HashMap<usize, LinkedList<usize>>,
}

impl Graph {
    pub fn adjacent_nodes(&self, node: usize) -> linked_list::Iter<usize> {
        match self.nodes.get(&node) {
            Some(x) => x.iter(),
            _ => linked_list::Iter::<usize>::new()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想从该adjacent_nodes 方法的相邻节点上返回一个迭代器。但是,当要求一个不存在的节点的邻居时,该方法显然应该返回一无所有的迭代器。但是我怎么创建它呢?我提供的代码实际上无法编译:

src/graph.rs:13:18: 13:49 error: no associated item named `new` found for type
        `collections::linked_list::Iter<'_, usize>` in the current scope
src/graph.rs:13             _ => linked_list::Iter::<usize>::new()
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

我猜想,我可以解决此问题,boxed::Box但由于我试图避免不必要的堆分配,显然这不是次优的解决方案。

所以,我的问题是:在Rust中是否可以创建特定类型的迭代器?

iterator rust

7
推荐指数
1
解决办法
1033
查看次数

如何在成功时将迭代器转换为流或在失败时将空流转换为空流?

我想采用常规迭代器并将其转换为流,以便我可以进行进一步的流处理.麻烦的是我可能有一个迭代器或错误来处理.我觉得我很接近这个:

#[macro_use]
extern crate log;
extern crate futures; // 0.1.21
extern crate tokio;

use futures::prelude::*;
use futures::{future, stream};
use std::fmt::Debug;
use std::net::{SocketAddr, ToSocketAddrs};

fn resolve(addrs: impl ToSocketAddrs + Debug) -> impl Stream<Item = SocketAddr, Error = ()> {
    match addrs.to_socket_addrs() {
        Ok(iter) => stream::unfold(iter, |iter| match iter.next() {
            Some(a) => Some(future::ok((a, iter))),
            None => None,
        }),
        Err(e) => {
            error!("could not resolve socket addresses {:?}: {:?}", addrs, e);
            stream::empty()
        }
    }
}

fn main() {
    let task = …
Run Code Online (Sandbox Code Playgroud)

asynchronous future rust

2
推荐指数
1
解决办法
476
查看次数

标签 统计

rust ×2

asynchronous ×1

future ×1

iterator ×1