如何为Vec中的每个元素打印索引和值?

时间:2019-02-20 22:09:00

标签: vector rust iterator

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

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。我完全陷入了困境。

2 个答案:

答案 0 :(得分:6)

在书中您可以看到此行:

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

如果您查看文档,则可以看到Iteratorenumerate的描述状态的许多有用功能:

  

创建一个迭代器,该迭代器将给出当前迭代次数以及下一个值。

     

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

     

enumerate()保持其计数为usize。如果要以其他大小的整数进行计数,则zip函数提供了类似的功能。

有了这个,您就有了向量中每个元素的索引。执行所需操作的简单方法是使用count

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

答案 1 :(得分:0)

这是打印向量的索引和值的简单示例:

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

    println!("length is {}", vec1.len());
    for x in 0..vec1.len() {
        println!("{} {}", x, vec1[x]);
    }
}

此程序输出为-

length is 5
0 1
1 2
2 3
3 4
4 5