Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何在编译时压缩未知数量的迭代器?_Rust_Iterator - Fatal编程技术网

Rust 如何在编译时压缩未知数量的迭代器?

Rust 如何在编译时压缩未知数量的迭代器?,rust,iterator,Rust,Iterator,我有许多由用户输入指定的Rust迭代器,我希望在lockstep中迭代这些迭代器 这听起来像是一个类似的工作,除了我可能需要两个以上的迭代器压缩在一起。我查看了和,但这两个都要求在编译时知道要压缩的迭代器的数量。对于我的任务,要压缩在一起的迭代器的数量取决于用户输入,因此在编译时无法知道 我希望能有一个像这样的东西,需要一个难以忍受的东西。我想函数签名可能是这样的: fn manyzip<T>(iterators: Vec<T>) -> ManyZip<T&g

我有许多由用户输入指定的Rust迭代器,我希望在lockstep中迭代这些迭代器

这听起来像是一个类似的工作,除了我可能需要两个以上的迭代器压缩在一起。我查看了和,但这两个都要求在编译时知道要压缩的迭代器的数量。对于我的任务,要压缩在一起的迭代器的数量取决于用户输入,因此在编译时无法知道

我希望能有一个像这样的东西,需要一个难以忍受的东西。我想函数签名可能是这样的:

fn manyzip<T>(iterators: Vec<T>) -> ManyZip<T>
where
    T: Iterator
fn manyzip(迭代器:Vec)->manyzip
哪里
迭代器
仅适用于编译时已知迭代器数量的情况


我可以使用索引等解决我的特定问题,只是感觉应该有更好的方法。

实现自己的迭代器,该迭代器迭代输入迭代器并收集它们:

struct Multizip<T>(Vec<T>);

impl<T> Iterator for Multizip<T>
where
    T: Iterator,
{
    type Item = Vec<T::Item>;

    fn next(&mut self) -> Option<Self::Item> {
        self.0.iter_mut().map(Iterator::next).collect()
    }
}

fn main() {
    let mz = Multizip(vec![1..=2, 10..=20, 100..=200]);

    for v in mz {
        println!("{:?}", v);
    }
}
struct-Multizip(Vec);
Multizip的impl迭代器
哪里
T:迭代器,
{
项目类型=Vec;
fn下一步(&mut self)->选项{
self.0.iter_mut()
}
}
fn main(){
设mz=Multizip(vec![1..=2,10..=20,100..=200]);
对于mz中的v{
println!(“{:?}”,v);
}
}

假设
ManyZip
存在,它应该如何实现
Iterator
——它应该产生
T
s,还是
Vec
s,或者
impl Iterator
s?你可能会发现这很有帮助。
迭代器:Vec
——你想只接受一个类型完全相同的迭代器向量吗(可能拥有)迭代器的迭代器,让next()返回迭代器会很好,但在我写问题时,我无法计算出假设函数签名的类型。