如何使 enumerate 返回索引作为 u32 而不是 usize?

Fin*_*ber 3 rust

我看到当enumerate被调用时,该index值以usize. 为什么是这样?我怎样才能让它返回索引作为另一种数字类型?比如说u32?

现在我必须手动转换为u32. 例如:

let mut even_index: Vec<u32> = Vec::new();
for (i, v) in vec![10,27,31,40,5].iter().enumerate() {
    if v % 2 == 0 {
        even_index.push(i as u32); // any way to avoid this?
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法不必手动执行转换u32enumerate返回索引u32

我查看了这里的文档,文档包含以下内容:

enumerate() 将其计数保留为 usize。如果您想按不同大小的整数进行计数,zip 函数提供类似的功能。

我查看了该zip函数,看起来它做了一些不同的事情,所以我不明白为什么当需要按不同大小的整数进行计数时建议将其作为替代方案。

Sta*_*eur 6

您可以使用 zip 和 range 执行以下操作:

fn main() {
    let mut even_index: Vec<u32> = Vec::new();
    for (i, v) in (0u32..).zip([10, 27, 31, 40, 5]) {
        if v % 2 == 0 {
            even_index.push(i);
        }
    }

    assert_eq!(even_index, [0, 3]);
}
Run Code Online (Sandbox Code Playgroud)