Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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 - Fatal编程技术网

Rust 在配分函数中获取项的索引

Rust 在配分函数中获取项的索引,rust,Rust,我需要在rust中拆分一个数组/向量,并在文档中找到它。看起来传递给分区的回调函数只能访问数组的项。如何获取项目的索引 例如,给定一个数组[1,2,3,4],我如何根据它们的位置将其拆分为两个,这样第一个数组将是[1,3],因为它们每个都有一个偶数位置1和3的索引0和2是偶数,第二个将是[2,4]。在迭代迭代器时获取索引,您可以使用 要在迭代迭代器时获取索引,可以使用 解决方案可以是使用itertools并从中获得: use itertools::{Either, Itertools}; fn

我需要在rust中拆分一个数组/向量,并在文档中找到它。看起来传递给分区的回调函数只能访问数组的项。如何获取项目的索引


例如,给定一个数组[1,2,3,4],我如何根据它们的位置将其拆分为两个,这样第一个数组将是[1,3],因为它们每个都有一个偶数位置1和3的索引0和2是偶数,第二个将是[2,4]。

在迭代迭代器时获取索引,您可以使用


要在迭代迭代器时获取索引,可以使用


解决方案可以是使用itertools并从中获得:

use itertools::{Either, Itertools};

fn main() {
    let a = vec![1, 2, 3, 4];

    let (b, c): (Vec<_>, Vec<_>) = a.into_iter().enumerate().partition_map(|(i, foo)| {
        if i % 2 == 0 {
            Either::Left(foo)
        } else {
            Either::Right(foo)
        }
    });

    println!("{:?}, {:?}", b, c);
}

解决方案可以是使用itertools并从中获得:

use itertools::{Either, Itertools};

fn main() {
    let a = vec![1, 2, 3, 4];

    let (b, c): (Vec<_>, Vec<_>) = a.into_iter().enumerate().partition_map(|(i, foo)| {
        if i % 2 == 0 {
            Either::Left(foo)
        } else {
            Either::Right(foo)
        }
    });

    println!("{:?}, {:?}", b, c);
}

我不喜欢这个解决方案,如果你只坚持使用std,我会使用可变状态:或者自己实现分区映射。我不喜欢这个解决方案,如果你只坚持使用std,我会使用可变状态:或者自己实现分区映射。注释:最好将迭代器链拆分成多行,使其更简单次要注释:最好将迭代器链拆分为多行,使其更具可读性。
println!("{:?} {:?}", unenumerate(a), unenumerate(b)); // [1, 3] [2, 4]
use itertools::{Either, Itertools};

fn main() {
    let a = vec![1, 2, 3, 4];

    let (b, c): (Vec<_>, Vec<_>) = a.into_iter().enumerate().partition_map(|(i, foo)| {
        if i % 2 == 0 {
            Either::Left(foo)
        } else {
            Either::Right(foo)
        }
    });

    println!("{:?}, {:?}", b, c);
}