首页 > 解决方案 > 如何打印 Vec 中每个元素的索引和值?

问题描述

我正在尝试完成此页面底部的活动,我需要打印每个元素的索引以及值。我从代码开始

use std::fmt; // Import the `fmt` module.

// Define a structure named `List` containing a `Vec`.
struct List(Vec<i32>);

impl fmt::Display for List {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        // Extract the value using tuple indexing
        // and create a reference to `vec`.
        let vec = &self.0;

        write!(f, "[")?;

        // Iterate over `vec` in `v` while enumerating the iteration
        // count in `count`.
        for (count, v) in vec.iter().enumerate() {
            // For every element except the first, add a comma.
            // Use the ? operator, or try!, to return on errors.
            if count != 0 { write!(f, ", ")?; }
            write!(f, "{}", v)?;
        }

        // Close the opened bracket and return a fmt::Result value
        write!(f, "]")
    }
}

fn main() {
    let v = List(vec![1, 2, 3]);
    println!("{}", v);
}

我是编码新手,我正在通过阅读 Rust 文档和 Rust by Example 来学习 Rust。我完全坚持这一点。

标签: vectorrustiterator

解决方案


在书中你可以看到这一行:

for (count, v) in vec.iter().enumerate()

如果您查看文档,您可以看到很多有用的函数Iteratorenumerate的描述状态:

创建一个迭代器,它给出当前迭代计数以及下一个值。

返回的迭代器产生对(i, val),其中 i 是迭代的当前索引,val 是迭代器返回的值。

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

有了这个,你就有了向量中每个元素的索引。做你想做的事情的简单方法是使用count

write!(f, "{}: {}", count, v)?;

推荐阅读