rust 是否具有使用 `iter()` 方法或可重置迭代器的集合的特征?

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

函数接受

dyn IntoIterator<blah>
对象很有用,它允许您使用
into_iter()
,但这需要获取集合的所有权。

Rust 似乎缺少

iter()
方法的特性。
itertools
板条箱之类的东西可以替代吗?

是否有可重置/可重启迭代器的特征?

是否有一些替代功能:

  1. 想要多次迭代一个集合而不克隆它。
  2. 不想拥有任何东西。

我想我可以接受

Iterator<Item=T>+Clone
,但这有点难看(我必须在第一次使用它之前使用迭代器)。


我应该添加我的实际目标:我想制作一堆可以将

&[T]
&IndexSet<T>
(来自 indexmap 板条箱)作为参数的函数。

rust iterator iterable rust-itertools
1个回答
2
投票

需要取得收藏品的所有权

不不不,如果物品可以参考:

fn main() {
    let a = vec![1, 2, 3];
    do_it_twice_by_ref(&a);
    dbg!(a);
}

fn do_it_twice_by_ref<'a>(it: impl IntoIterator<Item = &'a u8> + Copy) {
    for i in it {
        dbg!(i);
    }
    for i in it {
        dbg!(i);
    }
}

之所以可行,是因为通常还有一个

impl IntoIterator for &Collection
在这里查看
IndexSet
),而
iter
方法通常是根据它来实现的。
Copy
在共享参考文献中免费提供。

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